【发布时间】:2019-01-17 07:57:29
【问题描述】:
我正在开发一个带有许多对话框的 android 应用程序,所有这些对话框都扩展了一个名为“DialogFragmentBase”的自定义类,该类扩展了库的“DialogFragment”。所有活动都使用在 DialogFragmentBase 中重写的 show() 方法。
如果父活动是后台的(如接听电话),我想阻止显示对话框,因为这会导致非法状态异常,但同时我不想保护每个 show() 调用应用程序:
if(getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED))
所以我想在 DialogFragmentBase 中做这样的事情:
@Override
public void show(FragmentManager manager, String tag){
List<Fragment> fragments = manager.getFragments();
if(fragments != null && fragments.size() > 0){
FragmentActivity activity = fragments.get(fragments.size()-1).getActivity();
if(activity != null && activity.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)){
super.show(manager, tag);
}
}
}
所以我的问题是:像这样访问上一个片段是否被认为是一种不好的做法?它确实有效......但我记得在某个地方读到片段不应该相互交流。如果这确实是一种不好的做法,那么可以在 DialogFragmentBase 中实现的更好的解决方案是什么(以避免在任何地方添加警卫)。
注意:我尝试了here 中描述的 onSaveInstanceState 解决方案,但由于尚未显示 DialogFragment,因此此时不需要调用 onSaveInstanceState。 getActivity() 也返回 null,因为此时尚未调用 onAttach。
谢谢!
【问题讨论】:
标签: android illegalstateexception dialogfragment