【问题标题】:Detach fragment not immediately不立即分离片段
【发布时间】:2014-05-06 15:40:31
【问题描述】:

我有一个小问题。 目前我有一个片段。 分离时,我想向用户显示您是否要保存更改。 但是我想在用户选择一个选项后调用 super.onDetach() 。我试图在一个选项之后调用 super.onDetach() 但是我得到一个异常,即分离时不调用 super.onDetach() 。有什么想法吗?

提前致谢

这是我的代码:

@Override
public void onDetach() {


    DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            switch (which){

            case DialogInterface.BUTTON_POSITIVE:
                if(attachProfiel){
                    FragmentProfiel.updateProfiel();
                }
                if(attachDiagnose){
                    FragmentDiagnose.updateDiagnose();
                }
                if(attachAndere){
                    FragmentAndere.updateAndere();
                }
                break;

            case DialogInterface.BUTTON_NEGATIVE:
                break;
            }
        }
    };

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setMessage("Save changes?").setPositiveButton("Ja", dialogClickListener)
        .setNegativeButton("Nee", dialogClickListener).show();


}

OnDestroyView :

@Override
public void onDestroyView() {
    new ExitFragment(getActivity()).show(getFragmentManager(), "MyDialog");
    super.onDestroyView();

}

【问题讨论】:

  • 你在 onAttach() 中做了什么工作吗?
  • 不,不在那个片段中。但是我在布局中有 3 个片段使用 onAttach(向主片段发出信号以了解片段是否可以从 3 个片段中获取值)
  • 您实际上可以在 onDestroyView() 中调用对话框片段,而不是 onDetach()。一旦你的片段被事务替换,这可以确保保存状态。
  • 试试看,如果有效,请告诉我?
  • 我刚刚尝试过并创建了一个 exitFragment 然后在 OnDestroyView 上调用该片段,然后我执行 super.OnDestroyView(); .碎片仍然立即分离。检查帖子以获取 OnDestroyView 代码。

标签: android android-fragments detach


【解决方案1】:

我建议您在onBackPressed() 方法中调用您的DialogFragment(),并要求用户保存首选项。如果您想回收用户在片段中输入的数据,请在 android 中使用SharedPreference。见http://developer.android.com/reference/android/content/SharedPreferences.html

【讨论】:

  • 我无法在 Fragment 中覆盖 onBackPressed(取而代之的是 OnDetach)。使用 Sharedpreferences 是个好主意。
  • 任何时候,我的荣幸@David
【解决方案2】:

我会说你不应该那样做。这种移动设计并不安全。实现这一点的唯一方法是阻塞 Ui 线程一段时间,直到用户在对话框中按下某些东西或固定时间到期。但是然后假设当应用程序阻止用户接到电话时,或者更糟糕的是,当对话框即将显示时电话打进来。这将是一场噩梦。

解决此问题的最佳方法是定期(临时)保存屏幕状态,然后询问您在下一个片段或活动的 onresume 中有未保存的更改。为了让事情顺利运行,android 确实需要能够在需要时关闭您的应用程序。如果你试图绕过那个控制,那么它的未来就会变得一团糟。

【讨论】:

    猜你喜欢
    • 2015-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 2015-01-06
    • 1970-01-01
    相关资源
    最近更新 更多