【发布时间】:2016-02-25 20:33:32
【问题描述】:
我实现了一个导航抽屉,但问题是当按下后退按钮时,绘图中的选中项与当前片段不对应(仅通过导航抽屉实际添加的最后一个片段)
这里有一个解决方案:Updating the Navigation Drawer (with DrawerLayout) when back button is pressed
解决方案如下:
getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
FragmentManager fm = getSupportFragmentManager();
String stackName = null;
for(int entry = 0; entry < fm.getBackStackEntryCount(); entry++){
stackName = fm.getBackStackEntryAt(entry).getName();
Log.i("BC", "stackEntry" + entry);
}
if (stackName == "Fragment1"){
mDrawerList.setItemChecked(0, true);
} else if (stackName == "Fragment2") {
mDrawerList.setItemChecked(1, true);
}
});
问题在于条件。当您有很多项目时,必须手动更改要检查的导航项目的索引是一件痛苦的事情
我要做的是监听 backstack 中的变化,如果检测到,则获取当前片段的 id(在布局文件中定义)并将其传递给navigationView.setCheckedItem() 以自动检查相应的导航物品。像这样的:
navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setCheckedItem(R.id.nav_new);
在我的 mainactivity 类中,如何以 R.id.xxx 的形式获取当前片段的 id,以便将其传递给 setCheckedItem?
【问题讨论】:
-
为什么不使用
String.equals而不是==来比较字符串? -
嗯,是的,但那不是我的代码。我正在尝试找到一种方法来完全消除该条件块
标签: android android-layout android-fragments android-navigation