【问题标题】:save instance in FragmentTabHost在 FragmentTabHost 中保存实例
【发布时间】:2014-09-17 09:15:06
【问题描述】:

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

主要的 FragmentActivity

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

当我在主 FragmentTabHost 的第一个 TAB1 中将 tab2 切换到 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: 无法保留嵌套在其他片段中的片段 在 android.support.v4.app.Fragment.setRetainInstance(Fragment.java:784)

【问题讨论】:

  • @mmlooloo,更新问题
  • 尝试添加setRetainInstance(true);
  • 加到-TAB 1
  • 是的,我尝试将它添加到 TAB1 和其他情况下的 tab1 并得到相同的错误结果
  • 不只是添加到 -TAB1 因为 tab1 是嵌套片段。

标签: android android-fragments


【解决方案1】:

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

你的响应对象你的响应对象; //这应该是全局的

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    相关资源
    最近更新 更多