导航抽屉项目保持选中状态 Android
Navigation Drawer item remains selected Android
我的导航抽屉一直显示最后选择的 item.Is 有任何方法可以删除 it.I 如果用户在主页,导航抽屉项目应该是 non-highlighted。
我试过了
drawer.setSelected(false);
在 onResume() 中。但是没用。
请参考附件截图,有助于理解。
使用下面的代码:
navigationView.getMenu().getItem(0).setChecked(false);
调用后调用此方法setNavDrawer();
getItem(int index)
方法得到MenuItem
然后你可以在那个MenuItem
上调用setChecked(true);
,你剩下要做的就是找出哪个元素索引默认有没有,用那个索引替换0。
您可以 select(突出显示)项目,方法是调用:
onNavigationItemSelected(navigationView.getMenu().getItem(0));
Note: For nexus 4, support library revision 24.0.0. I recommend use navigationView.setCheckedItem(id);
我用
@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
覆盖结束。
除上述解决方案外,如果您的 drawer_view.xml 文件中的组元素包含以下属性,
android:checkableBehavior="single"
如下例所示:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single" >
<item
... />
<item
... />
</group>
</menu>
none 上述解决方案有效。因此,如果您不想要该突出显示功能,请确保不要使用该属性。
添加 @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);
}
}
}
使用这个:
navigationView.getCheckedItem().setChecked(false);
在您的菜单资源文件中将 android:checkableBehavior 设置为 none
android:checkableBehavior="none"
在 onNavigationItemSelected(MenuItem item) 的开头放置:
item.setChecked(假);
如果您查看 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();
}
如果您使用的是 Kotlin, 这就是答案:
menuItem.isCheckable = false
对我来说最好的方法是在 navigationView 中使用以下代码选项:
menuItem.setCheckable( false );
navigationView.setNavigationItemSelectedListener(
new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
menuItem.setCheckable( false );
mDrawerLayout.closeDrawers();
return true;
}
});
您可以使用此方法删除除用户单击的项目之外的所有项目的 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)
对于除作为参数传递的第二个索引项之外的所有项
编译器不检查空值就骂。这对我有用:
Objects.requireNonNull(navigationView.getCheckedItem()).setChecked(false);
我的导航抽屉一直显示最后选择的 item.Is 有任何方法可以删除 it.I 如果用户在主页,导航抽屉项目应该是 non-highlighted。
我试过了
drawer.setSelected(false);
在 onResume() 中。但是没用。
请参考附件截图,有助于理解。
使用下面的代码:
navigationView.getMenu().getItem(0).setChecked(false);
调用后调用此方法setNavDrawer();
getItem(int index)
方法得到MenuItem
然后你可以在那个MenuItem
上调用setChecked(true);
,你剩下要做的就是找出哪个元素索引默认有没有,用那个索引替换0。
您可以 select(突出显示)项目,方法是调用:
onNavigationItemSelected(navigationView.getMenu().getItem(0));
Note: For nexus 4, support library revision 24.0.0. I recommend use
navigationView.setCheckedItem(id);
我用
@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
覆盖结束。
除上述解决方案外,如果您的 drawer_view.xml 文件中的组元素包含以下属性,
android:checkableBehavior="single"
如下例所示:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single" >
<item
... />
<item
... />
</group>
</menu>
none 上述解决方案有效。因此,如果您不想要该突出显示功能,请确保不要使用该属性。
添加 @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);
}
}
}
使用这个:
navigationView.getCheckedItem().setChecked(false);
在您的菜单资源文件中将 android:checkableBehavior 设置为 none
android:checkableBehavior="none"
在 onNavigationItemSelected(MenuItem item) 的开头放置: item.setChecked(假);
如果您查看 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();
}
如果您使用的是 Kotlin, 这就是答案:
menuItem.isCheckable = false
对我来说最好的方法是在 navigationView 中使用以下代码选项:
menuItem.setCheckable( false );
navigationView.setNavigationItemSelectedListener(
new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
menuItem.setCheckable( false );
mDrawerLayout.closeDrawers();
return true;
}
});
您可以使用此方法删除除用户单击的项目之外的所有项目的 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)
对于除作为参数传递的第二个索引项之外的所有项
编译器不检查空值就骂。这对我有用:
Objects.requireNonNull(navigationView.getCheckedItem()).setChecked(false);