J'ai un fragment qui peut créer et afficher un DialogFragment, mais quand je clique sur le bouton de retour, il rejette la boîte de dialogue même si j'appelle explicitement setCancelable (false); Existe-t-il un moyen pour mon DialogFragment d'être insensible au bouton Retour?
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;
}
}
Je crée le DialogFragment à partir d'une 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();
}
}
Que diriez-vous d'utiliser setCancelable
? L'avez-vous essayé?
À partir de la documentation -
Contrôlez si la boîte de dialogue affichée peut être annulée. Utilisez ceci au lieu d'appeler directement Dialog.setCancelable (boolean), car DialogFragment doit changer son comportement en fonction de cela
Je ne suis pas du tout sûr que cela fonctionnera avec FragmentDialogs, mais si setCancelable ne fonctionnait pas pour vous, il pourrait être utile de consulter cet article: Android: invite l'utilisateur à enregistrer les modifications lors du retour bouton est enfoncé
Il explique comment détecter le bouton de retour enfoncé. Alors peut-être pouvez-vous supprimer la pression sur le bouton et cela empêchera la fermeture de la boîte de dialogue?
Cela peut vous aider.
newFragment.setCancelable(false);
apportez les modifications comme ci-dessus lors de la création d'un objet DialogFragment ou dans le constructeur de DialogFragment personnalisé comme dans l'exemple ci-dessous.
public static CustomClearHourDialog newInstance(Bundle args, IDialogListener listener)
{
CustomClearHourDialog clearHourDialog = new CustomClearHourDialog();
CustomClearHourDialog.listener = listener;
clearHourDialog.setCancelable(false);
return clearHourDialog;
}