【发布时间】:2015-12-15 09:03:31
【问题描述】:
我有一个Navigation Drawer,它有 5 个项目。
如果用户选择一个项目,我将在 FrameLayout 中加载相应的 Fragment
现在,如果用户拉出Navigation Drawer 并选择与之前相同的项目,我不应该再次加载相同的Fragment,所以我正在保存所选位置,如果之前选择的位置等于当前选择,我只是关闭Navigation Drawer如下:
String title = null;
invalidateOptionsMenu();
android.support.v4.app.Fragment fragment = null;
if (position == getPrevSelectedItem()) {
// Already selected fragment is being displayed
} else {
switch (position) {
case Numerics.ZERO:
fragment = new DashBoardFragment();
title = fragment.getClass().getSimpleName();
break;
case Numerics.ONE:
break;
case Numerics.TWO:
break;
case Numerics.THREE:
break;
case Numerics.FOUR:
break;
default:
break;
}
if (fragment != null) {
showFragment(fragment, title);
}
setSelectedItem(position);
}
我通过添加到backstack 来添加片段,以便提供返回到前一个片段的导航,如下所示:
if (fragment != null) {
String backStateName = fragment.getClass().getName();
mFragmentManager = getSupportFragmentManager();
mFragmentTransaction = mFragmentManager.beginTransaction();
mFragmentTransaction.replace(R.id.dashboard_container, fragment);
mFragmentTransaction.addToBackStack(backStateName);
mFragmentTransaction.commit();
}
问题是:
如果我选择项目编号:3,然后选择项目:4,如果我返回之前的选择仍然是 4,但我显示Fragment 没有:3。因此,如果我再次从 Navigation Drawer 中选择 Item no:3,Fragment 将再次加载。这个怎么解决??
编辑:
public int getPrevSelectedItem() {
return selectedItem;
}
public void setSelectedItem(int selectedItem) {
this.selectedItem = selectedItem;
}
【问题讨论】:
-
当您按下
back时,drawer不会得到updated- 因此您需要在activity中向onBackPressed()添加一些代码,您可以根据弹出的位置更新位置BackstackEntry.
标签: android android-fragments navigation navigation-drawer hamburger-menu