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

1cklez4t  于 2022-11-14  发布在  Android
关注(0)|答案(3)|浏览(174)

我使用DrawerNavigation来管理程序中的不同片段,并覆盖主Activity中的onBackPressed,以将片段中的onBackPressed用作此帖子:https://medium.com/@Wingnut/onbackpressed-for-fragments-357b2bf1ce8e
感谢丹尼尔Wilson,我可以在片段中使用onBackPressed,但是当我想在用户修改EditText而不保存后按下back按钮时显示警告。当前片段只是弹出回上一个片段,而警告显示在另一个片段上。我该如何更改它-在对话框调用中显示警告对话框?
下面是我的代码

我的对话框片段

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

}

反压

@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: ");
}

谢谢大家,

vlju58qv

vlju58qv1#

试试这个

@Override
public void onBackPressed() {

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

    super.onBackPressed();
    return;
   }

}
li9yvcax

li9yvcax2#

在Fragment中没有onBackPressed()方法,因此我们创建CallBackInterface并使用Activity的OnBackPressed()。请访问以下链接:希望它会对你有帮助。

sulc1iza

sulc1iza3#

你可以使用活动的OnBackPressed(),当它调用时,显示你的对话框。在dismiss时添加监听器(使用自定义监听器IMHO)。根据选择继续你的代码。
就像@mehul说的,只要添加一个侦听器机制。

相关问题