在FragmentTabHost中保存实例

时间:2014-09-17 09:15:06

标签: android android-fragments

我有一个项目,我使用FragmentTabHost与FragmentTabHost的内部片段

Main FragmentActivity

-FragmentTabHost 
  -TAB 1 - FragmentTabHost 
       -tab 1 Fragment
       -tab 2 Fragment    
  -TAB 2 - Fragment   
  -TAB 3 - FragmentTabHost    
  -TAB 4 - Fragment

当我将tab2切换到主FragmentTabHost的第一个TAB1中的tab1时,他们的实例总是重建,我称之为API方法,但我只是想显示“旧”'结果

如何保存此片段的实例并且不对API进行任何其他查询?

一些代码片段:

@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:不能保留嵌套在其他片段中的fragements             在android.support.v4.app.Fragment.setRetainInstance(Fragment.java:784)

1 个答案:

答案 0 :(得分:0)

如果您不想重建任何选项卡的实例,只需将API的响应对象作为全局变量&在onCreateView上签入

YourResponseObject yourResponseObject; //这应该是全局的

if(YourResponseObject == null){
    // Hit API here
}else
{
     InflateYourData(YourResponseObject)
}

您将能够保留标签的实例。