Как отобразить AlertDialog на фрагменте с помощью onBackPressed ()? - PullRequest
0 голосов
/ 28 июня 2018

Я использую DrawerNavigation для управления различными фрагментами в программе, а также перезаписываю onBackPressed в основном упражнении для использования onBackPressed во фрагменте, как в этом сообщении: https://medium.com/@Wingnut/onbackpressed-for-fragments-357b2bf1ce8e

Спасибо Дэниелу Уилсону, что я могу использовать onBackPressed во Fragment, но когда я хочу отобразить предупреждение, когда пользователь нажал кнопку назад после изменения EditText без сохранения. Текущий фрагмент просто возвращается к предыдущему, а на другом фрагменте отображается предупреждение. Как бы я изменил это - Отображение диалогового окна оповещения о вызове диалога?

Вот мой код

MyDialogFragment

public static class MyDialogFragment extends DialogFragment {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog alertDialog;
        alertDialog = new AlertDialog.Builder(getActivity())
                .setMessage(R.string.unsaved_changes_dialog_msg)
                .setPositiveButton(R.string.discard,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int whichButton) {

                                myContext.getSupportFragmentManager().popBackStack();
                            }
                        }
                )
                .setNegativeButton(R.string.keep_editing, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        // User clicked the "Keep editing" button, so dismiss the dialog
                        // and continue editing the pet.
                        if (dialog != null) {
                            dialog.dismiss();
                        }
                    }
                })
                .create();

        return alertDialog;
    }

}

onBackPressed

@Override
public void onBackPressed() {
    if (!mPetHasChanged) {
        Log.i(TAG, "onBackPressed: + mPetHasNotChanged");
        super.onBackPressed();
        return;
    }

    FragmentManager fm = getFragmentManager();
    MyDialogFragment dialogFragment = new MyDialogFragment ();
    dialogFragment.show(fm, "Sample Fragment");

    Log.i(TAG, "onBackPressed: ");
}

Спасибо всем,

Ответы [ 3 ]

0 голосов
/ 28 июня 2018

В Fragment нет метода onBackPressed () для, поэтому мы создаем CallBackInterface и используем OnBackPressed () операции. Перейдите по этой ссылке : http://vinsol.com/blog/2014/10/01/handling-back-button-press-inside-fragments/ надеюсь, это поможет вам.

0 голосов
/ 28 июня 2018

Вы можете использовать OnBackPressed () из активности, когда она вызывает, показать свой диалог. Добавить слушателя при отклонении (используйте пользовательский слушатель ИМХО). Зависимость от выбора продолжит ваш код.
Это как @mehul говорит, просто добавь механизм слушателя.

0 голосов
/ 28 июня 2018

Попробуйте это

@Override
public void onBackPressed() {

      FragmentManager fm = getFragmentManager();
      MyDialogFragment dialogFragment = new MyDialogFragment ();
      dialogFragment.show(fm, "Sample Fragment");

    super.onBackPressed();
    return;
   }

}
...