不立即分离片段
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 确实需要能够在需要时关闭您的应用程序。如果你试图绕过那个控制,那么它的未来就会变得一团糟。
【讨论】:
以上是关于不立即分离片段的主要内容,如果未能解决你的问题,请参考以下文章
为啥我不能从 FragmentPagerAdapter 分离片段?
音频处理Melodyne 网络缩放功能 ( 音符分离线 | 片段分离线 | 窗口滚动条 | 网格缩放 | 修改图像显示位置 | 显示五线谱 )