除了上述解决方案外,如果你的drawer_view.xml文件中的group元素包含以下属性:
android:checkableBehavior="single"
就像下面的示例所示:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single" >
<item
... />
<item
... />
</group>
</menu>
以上解决方案均未生效。因此,请确保您不使用该属性,如果您不想使用高亮功能。
android:checkableBehavior="none"
一起放在同一组中。其他项目(例如用于选择片段的项目)应该与 android:checkableBehavior="single"
放在同一组中。因此,对于应该被选择的项目,请使用“single”,对于不应被选择的项目,请使用“none”。 - user25我使用
@Override
protected void onResume() {
super.onResume();
for (int i = 0; i < navigationView.getMenu().size(); i++) {
navigationView.getMenu().getItem(i).setChecked(false);
}
}
如果不起作用,还需添加:itemOfMenu.setChecked(false);
到 onNavigationItemSelected
的覆盖方法的末尾。navigationView.menu.iterator().forEach { it.isChecked = false }
- user25android:checkableBehavior="none"
,永远不要调用items.checked = true
。 - user25navigationView.getMenu().getItem(0).setChecked(false);
setNavDrawer();
方法之后调用此方法。
getItem(int index)
方法获取MenuItem
,然后您可以在该MenuItem
上调用setChecked(true);
,您只需要找到默认元素索引是什么,并将0替换为该索引即可。onNavigationItemSelected(navigationView.getMenu().getItem(0));
navigationView.setCheckedItem(id);
。setChecked(false);
。这看起来很丑。 - user25android:checkableBehavior="none"
属性的组中。其他项目应该放在带有android:checkableBehavior="single"
属性的组中。 - user25navigationView.setCheckedItem(id)
不难看;它接受一个导航id,而不是索引。 - ZhiyongnavigationView.getCheckedItem().setChecked(false);
menuItem.setCheckable( false );
navigationView.setNavigationItemSelectedListener(
new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
menuItem.setCheckable( false );
mDrawerLayout.closeDrawers();
return true;
}
});
如果您正在使用 Kotlin,这就是答案:
menuItem.isCheckable = false
在@Zakir的回答基础上,如果像我一样你的NavigationView
中包含子菜单,则上述代码不会影响任何包含在子菜单中的项目。
为了解决这个问题,我实现了下面的递归方法来清除所有项目:
private void clearCheckedItems(Menu menu){
for (int i = 0; i < menu.size(); i++) {
MenuItem item = menu.getItem(i);
if(item.hasSubMenu()){
clearMenuChecked(item.getSubMenu());
}else{
item.setChecked(false);
}
}
}
private int _selectedItemID = -1;
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close)
{
public void onDrawerClosed(View view)
{
super.onDrawerClosed(view);
NavigationView navigationView = (NavigationView)view;
Menu menu = navigationView.getMenu();
MenuItem menuItem = menu.findItem(_selectedItemID);
if(menuItem != null)
{
menuItem.setChecked(false);
}
}
public void onDrawerOpened(View drawerView)
{
super.onDrawerOpened(drawerView);
}
};
public boolean onNavigationItemSelected(MenuItem item)
{
// Handle navigation view item clicks here.
_selectedItemID = item.getItemId();
}
private void setItemChecked(int itemIndex) {
for (int i = 0; i < navigationView.getMenu().size(); i++) {
navigationView.getMenu().getItem(i).setChecked(false);
}
navigationView.getMenu().getItem(itemIndex).setChecked(true);
}
setItemChecked(2)
,那么它将为除了第二个索引项(即您传递的参数)之外的所有项设置为未选中状态。