我有EditTexts片段,用户可以更改。
我也有工具栏上的后退按钮(以及物理后退按钮)
当用户回击时,我会检查数据是否已更改以及是否已更改 - 我需要打开对话框并询问用户"是否要保存更改?"。获取点击并采取相应行动(肯定或否定答案)。
保存数据的最佳位置(可能我错了)是onPause of this fragment。
问题在于对话框 - 它不是模态的,当它显示问题并等待用户反应时 - 它下面的片段消失,之前从堆栈返回。 我需要"暂停onPause"用对话框直到用户做出选择。什么是简单(或最正确)的方式?
@Override
public void onPause() {
if (!(text.getText().toString().equals(user.getName())))
{
new MaterialDialog.Builder(getActivity())
.title("Save changes?")
.content("You changed you personal details, save changes?")
.cancelable(false)
.positiveText("Save")
.negativeText("Discard")
.onPositive(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
save();
}})
.show();
}
super.onPause();
}
如果我想在onPause之前执行此操作 - 我需要抓住工具栏的后退按钮和物理后退按钮 - 这似乎太多了。寻找优雅的方式。
谢谢
答案 0 :(得分:0)
当活动进入后台时(不再显示在屏幕上),会调用onPause。
要在应用程序关闭屏幕之前显示对话框,您可以覆盖活动中的“onBackPressed”功能。
@Override
public void onBackPressed() {
performBackPressed();
}
public void performBackPressed(){
//show your dialog here
//call finish(); when done to close app
}
只要按下工具栏的后退按钮,您也可以调用performBackPressed()
方法。
如果您在按下后退时尝试显示片段中的弹出窗口,则您仍然必须在活动中覆盖该方法,然后在按下后退时通知该片段。
在我的应用程序中,我在活动中有一个包含所有碎片的容器。我使用此代码获取当前活动的片段:
YourFragmentClass curFrag = (YourFragmentClass) fragmentManager.findFragmentById(R.id.fragment_container);
然后我在片段中有一个名为onBackPressed()
的方法,我只是在我刚刚得到的片段上调用它。