在FragmentTabHost中保存实例

4

我有一个项目,其中我使用了带有内部fragment的FragmentTabHost。

主FragmentActivity

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

当我从主FragmentTabHost中的第一个TAB1切换到TAB2时,它们的实例总是重新构建,并且我调用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));

更新1. 我尝试添加

  @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRetainInstance(true);
    }

java.lang.IllegalStateException: 无法保留嵌套在其他片段中的片段 在android.support.v4.app.Fragment.setRetainInstance(Fragment.java:784)处


@mmlooloo,请更新问题。 - Gorets
尝试添加 setRetainInstance(true); - mmlooloo
你要将它添加到“-TAB 1”吗? - mmlooloo
是的,我尝试将它添加到TAB1和在其他情况下的tab1中,但得到了相同的错误结果。 - Gorets
不要将内容添加到-TAB1,因为tab1是嵌套片段。 - mmlooloo
=( 没有帮助。同样的错误。 - Gorets
1个回答

0

如果您不想重建任何选项卡的实例,只需将API的响应对象作为全局变量,并在onCreateView中进行检查。

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

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

你将能够保留选项卡的实例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接