Skip to content

Instantly share code, notes, and snippets.

@daichan4649
Last active December 15, 2015 17:39
Show Gist options
  • Save daichan4649/5297739 to your computer and use it in GitHub Desktop.
Save daichan4649/5297739 to your computer and use it in GitHub Desktop.
ProgressDialog (cancel pattern)
public class ProgressDialogFragment extends DialogFragmentBase {
public static ProgressDialogFragment newInstance() {
ProgressDialogFragment fragment = new ProgressDialogFragment();
// キャンセル無効(これやると、BACKキー自体無効になる)
// fragment.setCancelable(true);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
cancel = (Button) view.findViewById(R.id.cancel);
// キャンセル押下時
cancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// キャンセル要求
requestCancel();
}
});
// BACKキー押下時
getDialog().setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
// キャンセル要求
requestCancel();
// 後続処理不可(有効にするとダイアログ閉じられる)
return true;
}
return false;
}
});
return super.onCreateView(inflater, container, savedInstanceState);
}
private void requestCancel() {
// キャンセルボタン押下不可
cancel.setEnabled(false);
// キャンセル要求
// AsyncTask#cancel 実行とか
}
}
@daichan4649
Copy link
Author

以下の状況を想定

  • タスク開始(同時に 処理中D 表示)
  • BACK/キャンセル押下で タスクキャンセル要求
  • タスクキャンセル処理完了時に 処理中D を閉じる

ポイント

  • タスクキャンセル処理完了までは 処理中D を閉じない
  • このとき、キャンセルボタン、BACK押下時にキャンセルボタン押下不可。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment