如何使用onBackPressed()在片段上显示AlertDialog?

时间:2018-06-28 13:19:49

标签: android android-fragments navigation-drawer alertdialog onbackpressed

我使用DrawerNavigation管理程序中的不同片段,还重写了main活动中的onBackPressed以使用片段中的onBackPressed作为这篇文章:https://medium.com/@Wingnut/onbackpressed-for-fragments-357b2bf1ce8e

感谢Daniel Wilson,我可以在Fragment中使用onBackPressed,但当我想在用户不修改而保存修改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 :(得分:0)

尝试一下

@Override
public void onBackPressed() {

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

    super.onBackPressed();
    return;
   }

}

答案 1 :(得分:0)

在Fragment中没有onBackPressed()方法,因此我们创建CallBackInterface并使用活动的OnBackPressed()。         点击此链接:          http://vinsol.com/blog/2014/10/01/handling-back-button-press-inside-fragments/         希望对您有帮助。

答案 2 :(得分:0)

您可以使用活动的OnBackPressed()调用它时显示您的对话框。关闭时添加侦听器(使用自定义侦听器恕我直言)。取决于选择,继续执行代码。
就像@mehul说的一样,只需添加一个侦听器机制。