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个片段,所以我将它们分别存储在一个变量中。然后,当我切换片段时,我可以用这些变量引用它们 现在,有些情况下您不想这样做,因为您可能需要重新加载/刷新片段上的数据,而只是重新创建它比编写额外代码来处理刷新情况更有效 另一种情况是,当片段非常大时,您不想缓存它,在需要时重新创建片段比将所有内容都保存在内存中更有效。经典的性能与内存/存储问题 希望这有助于您在实施过程中做出正确的决策