Estoy usando un ProgressDialog
administrado como Fragment
. Incluso si configuro el ProgressDialog
como no cancelable, el botón ATRÁS seguirá funcionando para eliminar ese Fragment
de la pila. Mi mirada interna clase como esta:¿Cómo establecer el diálogo de progreso como no cancelable cuando se gestiona como un fragmento?
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;
}
}
Y entonces el método expongo es:
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");
}
Así la confusión obvia aquí es que el botón BACK elimina la ProgressDialog
porque está siendo manejada como una Fragment
. Entonces, ¿cómo puedo hacerlo para que el Dialog
no sea cancelable?
parece extraño a intentar algo como:
@Override
public void onBackPressed() {
if(fragmentManager.fragmentManager.findFragmentByTag("progress dialog")!=null) {
}
}
Android parece estar diciendo que ProgressDialog no debe utilizarse más, que en lugar usted debe “utilizar un ProgressBar en su diseño.” Http://developer.android.com/ guía/temas/ui/dialogs.html. No dicen por qué, pero supongo que podría ser para evitar todo el desorden en el manejo de eventos inusuales después de la espera (llamadas al servidor fallidas, aplicación que regresa de la tarea en segundo plano, etc.). – Lucy