我的导航抽屉一直显示最后选择的项目。有什么方法可以删除它。我希望如果用户在主页上,导航抽屉项目应该不突出显示。
我试过了
drawer.setSelected(false);
onResume()中的。但它没有帮助。
请参阅随附的截图,这将有助于理解。
答案 0 :(得分:18)
除了上述解决方案之外,如果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>
上述解决方案均无效。因此,如果您不想要该突出显示功能,请确保不使用该属性。
答案 1 :(得分:7)
我用
@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
覆盖的结尾。
答案 2 :(得分:2)
使用此:
navigationView.getCheckedItem().setChecked(false);
答案 3 :(得分:1)
使用以下代码:
navigationView.getMenu().getItem(0).setChecked(false);
致电setNavDrawer();
getItem(int index)
方法获取MenuItem
然后您可以在setChecked(true);
上调用MenuItem
,您要做的就是找出哪个元素索引默认有,并用该索引替换0。
您可以通过以下方式选择(突出显示)该项目:
onNavigationItemSelected(navigationView.getMenu().getItem(0));
注意:对于nexus 4,支持库版本24.0.0。我建议使用
navigationView.setCheckedItem(id);
答案 4 :(得分:1)
除了@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);
}
}
}
答案 5 :(得分:1)
答案 6 :(得分:1)
对我来说最好的方法是navigationView中的以下代码选项:
menuItem.setCheckable( false );
navigationView.setNavigationItemSelectedListener(
new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
menuItem.setCheckable( false );
mDrawerLayout.closeDrawers();
return true;
}
});
答案 7 :(得分:0)
如果您了解google应用如何工作,就会在触摸时看到选择。 为此,我们需要在抽屉关闭事件中取消选择上一个选定的项目(或全部取消选择)。
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();
}
答案 8 :(得分:0)
如果您使用的是Kotlin,这就是答案:
menuItem.isCheckable = false
答案 9 :(得分:0)
您可以使用此方法删除除用户单击的项目以外的所有项目上的setChecked
添加到@Zakir的答案中,我创建了一个方法,该方法删除了之前的已检查项目,而setChecked(true)仅适用于单击的项目 只是您必须在项目onClickListener中调用此方法,并需要传递一个需要该项目索引的参数。
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)
调用此方法,则它将setChecked(false)
对于除您作为参数传递的第二个索引项目之外的所有项目
答案 10 :(得分:0)
编译器在没有空检查的情况下骂人。这对我有用:
Objects.requireNonNull(navigationView.getCheckedItem()).setChecked(false);
答案 11 :(得分:-1)
在onNavigationItemSelected(MenuItem item)的开头,放置以下位置: item.setChecked(false);