避免在FragmentTabHost选项卡切换中重新加载数据

时间:2014-08-21 10:22:05

标签: android android-fragments fragment-tab-host

我使用FragmentTabHost有两个片段的Tabbed布局。在选项卡选择中,每个片段都会重新创建(onCreateView,onActivityCreated ...再次调用)。我在第一个片段(在onCreateView中)加载数据移动到其他选项卡,当我回到第一个片段时,重新创建整个片段,因此再次加载数据。我不想在标签切换上反复加载数据。我该怎么办?

我尝试附加和分离片段而不是添加/替换,但所有片段生命周期方法仍然在标签切换上一次又一次地调用。实现理想行为的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

你应该隐藏并展示你的碎片。否则,如果添加/替换,则会调用onCreateView。因此,如果片段已经存在,请使用show and hide。

在你的onTabChanged中,请添加以下代码。

if (mLastTab != newTab) {
            FragmentTransaction ft = this.getSupportFragmentManager()
                    .beginTransaction();
            if (mLastTab != null) {
                if (mLastTab.fragment != null) {
                    ft.hide(mLastTab.fragment);
                }
            }
            if (newTab != null) {
                if (newTab.fragment == null) {
                    newTab.fragment = Fragment.instantiate(this,
                            newTab.clss.getName(), newTab.args);
                    ft.add(android.R.id.tabcontent, newTab.fragment, newTab.tag);
                } else {
                    ft.show(newTab.fragment);
                }
            }