在我的基础Activity类中,我有链接到我从菜单调用的所有片段。
这样的事情:
BaseFragment mProjects;
BaseFragment mProfile;
public BaseFragment getFragment(FragmentType type) {
BaseFragment fr = null;
switch (type) {
case PROFILE:
fr = new Profile();
break;
case PROJECTS:
fr = new Projects();
break;
default:
return null;
}
return fr;
}
因此,我创建了一次可从菜单访问的片段实例。好吗?或者我应该每次创建片段?如果是这样,那我怎样才能保存片段状态(数据,位置)?因为当我从片段管理器使用replace
时,未调用替换片段的onSaveInstanceState
。因此,当我重新打开它时,没有保存状态。
顺便说一下,我在Activity中使用onSaveInstanceState
:
@Override
public void onSaveInstanceState(Bundle saveInstanceState) {
// doing things
super.onSaveInstanceState(saveInstanceState);
}
无论如何,如果我不存储片段onSaveInstanceState
的链接将永远不会调用。所以,我可以在onPause
方法中存储片段状态,但这似乎是不好的解决方案。
UPD:这不是基于意见的问题。应该有使用片段的最佳实践。所以我问了这个。
答案 0 :(得分:0)
也许你在FragmentActivity中犯了一个错误。
也许您在FragmentActivity中调用super.onSaveInstanceState(Bundle outState)时覆盖onSaveInstanceState
这将导致方法** onSaveInstanceState **未在片段
中调用<强>更新强> 或者,当您想要显示新片段时,可以使用hide / show而不是replace ...隐藏片段不会被杀死
答案 1 :(得分:0)
在替换当前显示的片段之前,需要getSupportFragmentManager().putFragment(Bundle, String, Fragment)
,这会将该片段存储到Bundle中,您可以保留对它的引用,并保存到您的activity的实例状态。
在getFragment
方法中,首先检查您保存片段的捆绑包是否包含您要创建的片段 - getSupportFragmentManager().getFragment(Bundle, String)
。这将为您提供一个可以返回和替换的片段。如果没有,请按照您当前的方式创建片段的新实例。