【发布时间】:2017-07-01 16:01:27
【问题描述】:
在我的程序中,我有一些片段,我可以通过单击此代码来替换每个片段。我的问题是:这些片段的加载量很低,单击每个片段后,会从中创建新片段,并在单击片段后再次导致加载。如何保存片段内容或状态并防止重新加载?
@Override
public void onNavigationDrawerItemSelected(int position) {
Fragment fragment = null;
switch (position) {
case 0:
fragment = new InfoFragment();
break;
case 1:
fragment = new ParentOtoFragment();
break;
case 2:
fragment = new ParentProFragment();
break;
case 3:
fragment = new SupportFragment();
break;
case 4:
fragment = new AboutFragment();
break;
}
if (fragment != null){
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.container,fragment).commit();
}
}
发布更新
在 @Vikram Ezhil 回复此主题后,我将 fragments 和 fragmentTAG 缩写为构造函数并将 @Vikram Ezhil 代码更改为以下代码,我的问题解决了。
@Override
public void onNavigationDrawerItemSelected(int position) {
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
if (getSupportFragmentManager().findFragmentByTag(fragmentTAGS[position]) == null) {
fragmentTransaction.add(R.id.container, fragments[position], fragmentTAGS[position]);
}
for (int i = 0; i < fragments.length; i++) {
if (i == position) {
fragmentTransaction.show(fragments[i]);
} else {
if (getSupportFragmentManager().findFragmentByTag(fragmentTAGS[position]) != null) {
fragmentTransaction.hide(fragments[i]);
}
}
}
fragmentTransaction.commit();
}
【问题讨论】: