我知道这个特定问题有几个答案,但是没有一个能帮助我解决它。
我正在开发一个具有抽屉导航(Mike Penz 抽屉导航)的应用程序。通过选择任何项目,用户被导航到相应的片段。片段完美地工作,并在方向变化时保持其状态。但是,其中一个片段有一个按钮,可以用新片段替换当前片段。当新片段出现在屏幕上时,如果用户改变了设备的方向,则会显示前一个片段。
流程:抽屉项目选择>片段A>按钮>片段B>改变方向>片段A。
编辑: 这就是第一个片段的名称:(开关)
case R.string.drawer_item_a:
FragmentA A = FragmentA.newInstance();
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, A)
.commit();
break;
这就是第二个片段的名称:
@Override
public void onClick(View v) {
FragmentManager fm = getActivity().getSupportFragmentManager();
FragmentB B = FragmentB.newInstance();
fm.beginTransaction()
.replace(R.id.container, B, String.valueOf(R.string.settings_pin_request))
.commit();
}
抽屉
result = new Drawer()
.withActivity(this)
.withToolbar(mToolbar)
.withActionBarDrawerToggle(true)
.addDrawerItems(
new PrimaryDrawerItem().withName("FragmentA"),
new PrimaryDrawerItem().withName("FragmentB")
)
.withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id, IDrawerItem drawerItem) {
if (drawerItem instanceof Nameable) {
mCurrentDrawerItem = position;
// Display appropriate fragment
switch (((Nameable) drawerItem).getNameRes()) {
case R.string.drawer_item_a:
FragmentA A = FragmentA.newInstance();
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, A)
.commit();
break;
case R.string.drawer_item_b:
FragmentA A = FragmentA.newInstance();
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, A)
.commit();
break;
}
mToolbar.setTitle(MainActivity.this.getString(((Nameable) drawerItem).getNameRes()));
}
}
}).build();
// Set the current drawer item
result.setSelection(mCurrentDrawerItem);
onResume() 方法实现了用户同步的逻辑。没有为片段状态编写任何内容。