Android 基于片段的选项卡--可以避免在每次更改时创建新片段吗?

Android 基于片段的选项卡--可以避免在每次更改时创建新片段吗?,android,optimization,android-fragments,tabs,Android,Optimization,Android Fragments,Tabs,我为我的应用程序制作了一个非常简单的基于片段的选项卡控制器 Fragment f = null; switch(index) { case 0: f = new AFragment(); break; case 1: f = new BFragment(); break;

我为我的应用程序制作了一个非常简单的基于片段的选项卡控制器

        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选项卡控制:

    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));
这很好,我唯一的问题是我为每个选项卡更改创建了新的片段。这听起来效率很低。因此,我的第一个想法是简单地在主活动中创建一个数组Fragment[]tabs,以将这些片段保存在内存中,然后用Fragment f=tabs[index];替换第一个代码块中的开关


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

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

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

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

希望这有助于您在实施过程中做出正确的决策