我使用DrawerNavigation管理程序中的不同片段,还重写了main活动中的onBackPressed以使用片段中的onBackPressed作为这篇文章:https://medium.com/@Wingnut/onbackpressed-for-fragments-357b2bf1ce8e
感谢Daniel Wilson,我可以在Fragment中使用onBackPressed,但当我想在用户不修改而保存修改EditText后按下“后退”按钮时显示警报。当前片段仅弹出回到上一个片段,警报显示在另一个片段上。我该如何更改-在对话框调用中显示警报对话框?
以下是我的代码
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: ");
}
谢谢大家
答案 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说的一样,只需添加一个侦听器机制。