Activity有isDestroyed(),但我找不到Fragment的对应物。
我可以覆盖onDestroyed()为自己设置一个标志,但我认为现有解决方案。
我正在尝试在更新片段中的UI之前检查片段是否在网络响应中被破坏。
任何帮助将不胜感激。谢谢!
答案 0 :(得分:9)
您可以创建Fragment作为其他片段的父级,并使用以下代码检查已销毁的功能。
public abstract class ASafeFragment extends Fragment
{
protected boolean isSafe()
{
return !(this.isRemoving() || this.getActivity() == null || this.isDetached() || !this.isAdded() || this.getView() == null);
}
...
}
或
public static boolean isSafeFragment( Fragment frag )
{
return !(frag.isRemoving() || frag.getActivity() == null || frag.isDetached() || !frag.isAdded() || frag.getView() == null );
}
答案 1 :(得分:1)
如果活动被销毁,所有片段都会被销毁,如果活动被销毁,一个简单的答案可能是调用getActivity().isDestroyed()
返回true,因此片段被销毁。嵌套片段通常不是一个好主意。
您还可以覆盖片段onDestroyView()
方法检查并将布尔变量设置为true
答案 2 :(得分:0)
我试图检查片段是否在网络中被破坏 响应,决定是否更新UI组件。
您可以使用onDestroyView()
,因为在UI被破坏后调用onDestroyView()
后无法进行UI更新。
在进行任何UI更新之前,您可以检查getActivity()
是否为null
。
答案 3 :(得分:0)
从developer站点:"当活动被销毁时,所有碎片都将被销毁。"所有fragmet都包含在活动中,因此您应该检查您的活动。
片段没有isDestroyed()
答案 4 :(得分:0)
决定如何处理可能正在进行的工作的最无懈可击的模式是将该工作放在Loader中。片段/活动的LoaderManager只有在适当的时间处理这些结果时才会调用LoaderCallbacks,或者甚至可能在配置更改后保留替换片段/活动的结果。它是额外的编码,但它是从中断和取消中恢复的最佳方式。