【问题标题】:Looking for best way to implement modal dialog in onPause寻找在 onPause 中实现模态对话框的最佳方法
【发布时间】:2017-09-19 07:25:50
【问题描述】:

我有用户可以更改的带有 EditTexts 的片段。

我在工具栏上也有后退按钮(还有物理后退按钮)

当用户回击时,我会检查数据是否已更改以及是否已更改 - 我需要打开对话框并询问用户“您要保存更改吗?”。获得点击并采取相应行动(肯定或否定答案)。

保存数据的最佳位置(也许我错了)是在这个片段的 onPause 中。

问题出在对话框上——它不是模态的,当它显示问题并等待用户反应时——它下面的片段消失了,之前的片段从堆栈中返回。 我需要用对话框“暂停 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 之前执行此操作 - 我需要抓住工具栏的后退按钮和物理后退按钮 - 似乎工作量太大。寻找优雅的方式。

谢谢

【问题讨论】:

    标签: android dialog modal-dialog lifecycle onpause


    【解决方案1】:

    当 Activity 移入后台(不再显示在屏幕上)时调用 onPause。

    要在应用离开屏幕之前显示一个对话框,您可以覆盖 Activity 中的“onBackPressed”函数。

    @Override
    public void onBackPressed() {
        performBackPressed();
    }
    
    public void performBackPressed(){
        //show your dialog here 
        //call finish(); when done to close app
    }
    

    您也可以在工具栏的后退按钮被按下时调用performBackPressed() 方法。

    如果您试图在按下返回时显示片段的弹出窗口,那么您仍然必须在活动中覆盖该方法,然后在按下返回时通知片段。

    在我的应用程序中,我在 Activity 中有一个容器,其中包含我的所有片段。我使用这段代码来获取当前活动的片段:

    YourFragmentClass curFrag = (YourFragmentClass) fragmentManager.findFragmentById(R.id.fragment_container);
    

    然后我在片段中有一个名为onBackPressed() 的方法,我只是在刚刚得到的片段上调用它。

    【讨论】:

    • 这是一个片段。它没有 onBackPressed。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多