Używam ProgressDialog
zarządzanego jako Fragment
. Nawet jeśli ustawię opcję ProgressDialog
na nieodwracalną, przycisk BACK będzie nadal działał, aby usunąć Fragment
ze stosu. Mój wewnętrzny klasa wyglądać następująco:Jak ustawić okno postępu, aby nie można było anulować, gdy jest zarządzane jako fragment?
public static class ProgressDialogFragment extends DialogFragment {
private DialogStyle dialogStyle;
public static ProgressDialogFragment newInstance(String title, String message) {
ProgressDialogFragment fragment = new ProgressDialogFragment();
Bundle args = new Bundle();
args.putString("title", title);
args.putString("message", message);
fragment.setArguments(args);
return fragment;
}
public void setDialogStyle(DialogStyle dialogStyle) {
this.dialogStyle = dialogStyle;
}
@Override
public ProgressDialog onCreateDialog(Bundle savedInstanceState) {
String title = getArguments().getString("title");
String message = getArguments().getString("message");
ProgressDialog progressDialog = new ProgressDialog(getActivity());
progressDialog.setTitle(title);
progressDialog.setMessage(message);
if(dialogStyle!=null) {
switch (dialogStyle) {
case CANCELABLE:
progressDialog.setCancelable(true);
break;
case NON_CANCELABLE:
progressDialog.setCancelable(false);
break;
}
} else {
progressDialog.setCancelable(false);
}
progressDialog.show();
return progressDialog;
}
}
I wtedy metoda I narazić się:
public void showProgressDialog(String title, String message, DialogStyle dialogStyle) {
Fragment prev = fragmentManager.findFragmentByTag("progress dialog");
if(prev!=null) {
ft.remove(prev);
}
ft.addToBackStack(null);
DialogFragment newFragment = ProgressDialogFragment.newInstance(title, message);
((ProgressDialogFragment)newFragment).setDialogStyle(dialogStyle);
newFragment.show(fragmentManager, "progress dialog");
}
Więc oczywiste zamieszanie o to, że przycisk BACK usuwa ProgressDialog
ponieważ jest zarządzany jako Fragment
. Więc jak mogę to zrobić, aby Dialog
nie można było anulować?
Wydaje się dziwne, aby spróbować czegoś takiego:
@Override
public void onBackPressed() {
if(fragmentManager.fragmentManager.findFragmentByTag("progress dialog")!=null) {
}
}
Androida zdaje się mówić, że ProgressDialog nie powinien być stosowany już, że zamiast trzeba „użyć ProgressBar w układzie”. Http://developer.android.com/ guide/topics/ui/dialogs.html. Nie mówią dlaczego, ale przypuszczam, że może to być uniknięcie wszelkich problemów związanych z nietypowymi zdarzeniami po oczekiwaniu (nieudane połączenia z serwerem, aplikacja powracająca z zadania w tle itd.). – Lucy