with from custom create activity android android-asynctask progressdialog fragment back-button

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



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; }