android - 在 Fragment TabHost 中保存实例

标签 android android-fragments

我有一个项目,我使用 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/

相关文章:

javascript - react 原生 : How to make change in specific item of ScrollView

java - fragment 应用,如何添加页脚?

android - ExpandableListFragment 与 LoaderManager 兼容包

kotlin - 如何从ViewPager访问父片段的 subview ?

android - 如何在android中压缩和存储图库中的图像到应用程序缓存

android - 如何从图库中选择图像并在另一个 Activity android中显示?

android - FFmpeg - 最后编译。怎么办?

在某些情况下,带有推送通知和后台进程的 Android 应用程序会被终止

android - React Native Android : Could not get BatchedBridge, 确保你的包被正确打包

java - 此 NavController 不知道导航 [destination_name]