导航抽屉项目仍然是选定的Android

问题描述 投票:7回答:8

我的导航抽屉一直显示最后选择的项目。有没有办法删除它。我想如果用户在主页,导航抽屉项目应该不突出显示。

我试过了

drawer.setSelected(false);

在onResume()中。但它没有帮助。

请参考随附的截图,这将有助于理解。

See the seetings options is highlighted even when I have come back from  Settings activity

android android-activity android-menu android-navigation-drawer
8个回答
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);


19
投票

除上述解决方案外,如果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>

以上解决方案均无效。因此,如果您不想要该突出显示功能,请确保不使用该属性。


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
投票

用这个:

navigationView.getCheckedItem().setChecked(false);

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);
        }
    }
}

1
投票

在菜单资源文件中将android:checkableBehavior设置为none android:checkableBehavior="none" enter image description here


0
投票

如果你看看谷歌应用程序如何工作,你会看到选择的触摸。要做到这一点,我们需要在抽屉关闭事件中取消选择最后选择的项目(或者只是所有项目)。

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();
}

-1
投票

在onNavigationItemSelected(MenuItem项)的开头放置:item.setChecked(false);

© www.soinside.com 2019 - 2024. All rights reserved.