Подтвердить что ты не робот

Android: как предотвратить обратную кнопку от отмены FragmentDialog

У меня есть фрагмент, который может создавать и вызывать диалог DialogFragment, но когда я нажимаю кнопку "Назад", он отклоняет диалог, хотя я явно вызываю setCancelable (false); Есть ли способ, по которому мой DialogFragment был бы нечувствителен к кнопке "Назад"?

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

}

Я создаю FragmentDialog из асинтеты:

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();
    }
}
4b9b3361

Ответ 1

Как насчет использования setCancelable? Вы попробовали?

Из Документов -

Управляет отменой отображаемого диалогового окна. Используйте это вместо напрямую вызывающий Dialog.setCancelable(boolean), потому что DialogFragment необходимо изменить свое поведение на основе этого

Ответ 2

Я не уверен, что это будет работать с FragmentDialogs, но если setCancelable не сработал для вас, возможно, стоит взглянуть на эту статью: Android. Попросите пользователя сохранить изменения при нажатии кнопки "Назад"

В нем объясняется, как определить нажатие кнопки "Назад". Так что, возможно, вы можете подавить нажатие кнопки, и это остановит диалог закрытия?

Ответ 3

Это может помочь вам.

newFragment.setCancelable(false); 

внести изменения, как указано выше, при создании объекта DialogFragment или в конструкторе Custom DialogFragment, как в примере ниже.

public static CustomClearHourDialog newInstance(Bundle args, IDialogListener listener)
        {
            CustomClearHourDialog clearHourDialog = new CustomClearHourDialog();            
            CustomClearHourDialog.listener = listener;
            clearHourDialog.setCancelable(false);
            return clearHourDialog;
        }