我有一个使用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
答案 0 :(得分:3)
当某些配置发生更改(例如方向)时,应用程序将重新启动,视图将重新创建,onCreate
将被调用。
重新创建视图时,ActionBar将转向原始状态。
但是,如果您向android:configChanges="keyboardHidden|orientation|screenSize"
添加Manifest.xml
,则会调用onConfigurationChanged
而不是onCreate
,视图将不会重新创建。
你应该保留android:configChanges =“keyboardHidden | orientation | screenSize”,然后在屏幕尺寸和方向发生变化后更改布局,方法是:onConfigurationChanged
。
以下是一些示例:Handling Runtime Changes
答案 1 :(得分:-1)
如果您不想对ScreenSize产生影响,那么您只能删除它。但是,如果你删除其他参数,如方向和键盘,那么只需在方向发生时加载整个布局。
所以我建议,只需使用如下内容:
android:configChanges="keyboard|orientation"
你将得到片段保持选中状态,布局不会更新。
如果没有帮助,请尝试告诉我。