我有一个使用 NavigationDrawer 的应用程序。
我像这样切换片段:
private class DrawerItemClickListener implements
ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
selectItem(position);
}
}
public void selectItem(int position) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
String fragmentTag = String.valueOf(position);
FragmentBase fragment = (FragmentBase) fragmentManager
.findFragmentByTag(fragmentTag);
if (null == fragment) {
fragment = createFragmentByPosition(position);
}
if (null == fragment)
return;
if (fragment.isAdded()) {
fragmentTransaction.show(fragment);
} else {
fragmentTransaction.add(R.id.content_frame, fragment, fragmentTag);
}
if (mCurrentFragment != null) {
fragmentTransaction.hide(mCurrentFragment);
}
mCurrentFragment = fragment;
fragmentTransaction.commitAllowingStateLoss();
mDrawerList.setItemChecked(position, true);
setTitle(mNoterActivities[position]);
mDrawerLayout.closeDrawer(mDrawerList);
}
private FragmentBase createFragmentByPosition(int position) { // FragmentBase just extends Fragment
FragmentBase fragment = null;
if (position == 0) {
fragment = new Fragment1();
Bundle args = new Bundle();
fragment.setArguments(args);
} else if (position == 1) { // Reminder
fragment = new Fragment2();
Bundle args = new Bundle();
fragment.setArguments(args);
}
return fragment;
}
在 onCreate() 方法中,我执行 selectItem(0)。
我之前使用 android:configChanges="keyboardHidden|orientation|screenSize"
的是Activity
,但现在我想开始为不同的屏幕尺寸和方向创建不同的布局。如果此代码在清单中,我无法使用适当命名的文件夹来执行此操作。
所以,我决定删除它(我不记得为什么我有它!)。但是,通过这样做,每当方向改变时,显示的片段仍然是相同的,但操作栏会更改为另一个片段配置(我认为是之前显示的片段),如果我然后尝试切换片段,操作栏更改(我认为也是之前显示的片段),但显示的片段没有改变。
什么不起作用:
更改.add
为.replace