android - from - progressdialog in fragment
Android: cómo evitar que el botón Atrás cancele un DialogFragment (3)
Tengo un Fragmento que puede crear y abrir un DialogFragment, pero cuando presiono el botón Atrás, se desactiva el cuadro de diálogo a pesar de que explícitamente llamo setCancelable (falso) ¿Hay alguna manera de que mi DialogFragment sea insensible al botón de retroceso?
public class LoadingDialogFragment extends DialogFragment
{
String title;
String msg;
public LoadingDialogFragment()
{
this.title = "Loading...";
this.msg = "Please wait...";
}
public LoadingDialogFragment(String title, String msg)
{
this.title = title;
this.msg = msg;
}
@Override
public Dialog onCreateDialog(final Bundle savedInstanceState)
{
final ProgressDialog dialog = new ProgressDialog(getActivity());
dialog.setTitle(title);
dialog.setMessage(msg);
dialog.setIndeterminate(true);
dialog.setCanceledOnTouchOutside(false);
dialog.setCancelable(false);
return dialog;
}
}
Creo el DialogFragment desde una AsyncTask:
private class GpsTask extends AsyncTask<String, Integer, Integer>
{
//ProgressDialog dialog;
@Override
protected void onPreExecute()
{
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
DialogFragment newFragment = new LoadingDialogFragment("Gathering Location", "Acquiring GPS lock...");
ft.addToBackStack(null);
newFragment.show(ft, "dialog");
}
@Override
protected Integer doInBackground(String... params)
{
//acquire a GPS lock and grab a few position updates
}
@Override
protected void onProgressUpdate(Integer... input) { }
@Override
protected void onPostExecute(Integer result)
{
getSupportFragmentManager().popBackStackImmediate();
}
}
¿Qué hay de usar setCancelable
? ¿Lo intentaste?
De los docs
Controla si el diálogo mostrado es cancelable. Use esto en lugar de llamar directamente a Dialog.setCancelable (booleano), porque DialogFragment necesita cambiar su comportamiento basado en esto
No estoy seguro de si esto funcionará con FragmentDialogs, pero si el setCancelable no funcionó para usted, valdría la pena ver este artículo: Android: Indica al usuario que guarde los cambios cuando se presiona el botón Atrás
Explica cómo detectar el botón de retroceso que se está presionando. ¿Entonces tal vez pueda suprimir la presión del botón y evitará que el diálogo se cierre?
Te puede ayudar.
newFragment.setCancelable(false);
realice cambios como los de arriba al crear el objeto DialogFragment o en el constructor de Custom DialogFragment como se muestra en la siguiente muestra.
public static CustomClearHourDialog newInstance(Bundle args, IDialogListener listener)
{
CustomClearHourDialog clearHourDialog = new CustomClearHourDialog();
CustomClearHourDialog.listener = listener;
clearHourDialog.setCancelable(false);
return clearHourDialog;
}