我有一个项目,我使用 FragmentTabHost 和 FragmentTabHost 的内部 fragment
主要 fragment Activity
-FragmentTabHost
-TAB 1 - FragmentTabHost
-tab 1 Fragment
-tab 2 Fragment
-TAB 2 - Fragment
-TAB 3 - FragmentTabHost
-TAB 4 - Fragment
当我在主 FragmentTabHost 的第一个 TAB1 中将 tab2 切换到 tab1 时,它们的实例总是重建并且我调用 API 方法,但我只想显示“旧”结果。
我怎样才能保存这个 fragment 的实例并且不对 API 进行任何额外的查询?
一些代码 fragment :
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.tab_layout, container, false);
mTabHost = (FragmentTabHost) rootView.findViewById(android.R.id.tabhost);
mTabHost.setup(context, getChildFragmentManager(), R.id.tabContent);
......
mTabHost.addTab(mTabHost.newTabSpec("fragment1").setIndicator(viewLeft),
FragmentTab1.class, new Bundle(0));
UPD1.我尝试添加
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
java.lang.IllegalStateException: 无法保留嵌套在其他 fragment 中的 fragment 在 android.support.v4.app.Fragment.setRetainInstance(Fragment.java:784)
最佳答案
如果不想重建任何tab的实例,只需要将API的响应对象作为全局变量,在onCreateView中勾选即可
你的响应对象你的响应对象;//这应该是全局的
if(YourResponseObject == null){
// Hit API here
}else
{
InflateYourData(YourResponseObject)
}
您将能够保留选项卡的实例。
关于android - 在 Fragment TabHost 中保存实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25886601/