不立即分离片段

Posted

技术标签:

【中文标题】不立即分离片段【英文标题】: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 代码。 【参考方案1】:

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

【讨论】:

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

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

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

【讨论】:

以上是关于不立即分离片段的主要内容,如果未能解决你的问题,请参考以下文章

片段事务分离和附加后ListView不工作?

为啥我不能从 FragmentPagerAdapter 分离片段?

音频处理Melodyne 网络缩放功能 ( 音符分离线 | 片段分离线 | 窗口滚动条 | 网格缩放 | 修改图像显示位置 | 显示五线谱 )

Android 片段分离

android如何跨片段分离/附加保留视图状态

在分离的片段中获取上下文/活动?