【问题标题】:Fragment-based tabs -- possible to avoid creating new fragments on each change?基于片段的选项卡——可以避免在每次更改时创建新片段吗?
【发布时间】:2014-08-24 19:24:04
【问题描述】:

我为我的应用制作了一个非常简单的基于片段的标签控制器。

        Fragment f = null;
        switch(index) {
            case 0:
                f = new AFragment();
                break;
            case 1:
                f = new BFragment();
                break;
            case 2:
                f = new CFragment();
                break;
        }

        if(f!=null) {
            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.replace(R.id.pnlTabContent, f);
            ft.commit();
        }

这些片段由 ActionBar-tabs 控制:

    ActionBar actionBar = getSupportActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    actionBar.addTab(actionBar.newTab().setText("A").setIcon(R.drawable.tab_a).setTabListener(this));
    actionBar.addTab(actionBar.newTab().setText("B").setIcon(R.drawable.tab_b).setTabListener(this));
    actionBar.addTab(actionBar.newTab().setText("C").setIcon(R.drawable.tab_c).setTabListener(this));

这很好用,我唯一的问题是我为每个选项卡更改创建新片段。这听起来效率低下。所以我的第一个想法是在主activity中简单地创建一个数组(Fragment[] tabs)来将片段保存在内存中,然后将第一个代码块中的开关替换为Fragment f = tabs[index];

但是我找不到任何文章提到这个问题,这让我相信每次都实例化新片段确实是常见的做法。那正确吗?有没有办法“缓冲”碎片?

【问题讨论】:

    标签: android optimization android-fragments tabs


    【解决方案1】:

    这真的取决于应用程序。您绝对可以缓冲/缓存片段。我在我的一个应用程序中就是这样做的。我只有 3 个片段,所以我将它们分别存储在一个变量中。然后当我切换片段时,我可以使用这些变量来引用它们。

    现在,有些情况下您不想这样做,因为您可能需要重新加载/刷新片段上的数据,并且重新创建它比编写额外代码来处理刷新情况更有效。

    您不想缓存它的另一种情况是片段非常大,并且在需要时重新创建片段而不是将所有内容保存在内存中会更有效。 (经典的性能与内存/存储问题)。

    希望这可以帮助您做出正确的实施决策。

    【讨论】:

      猜你喜欢
      • 2013-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多