【问题标题】:Dynamically added menu items disappear on click in Navigation Drawer动态添加的菜单项在导航抽屉中单击时消失
【发布时间】:2018-12-24 04:43:59
【问题描述】:

我跟着Android Developer documentation创建了一个抽屉式导航。

然后我想添加 2 组菜单项。一个用于用户创建的列表,另一个用于标签。由于我无法直接为组设置标题,因此我按照教程HERE 并将组包装在标签中。

我的 XML 菜单如下所示:

在 onCreate 中,我使用它的 id 找到 NavigationView,然后获取它的菜单,通过它的 id 获取第一个,获取项目的 SubMenu 并添加 MenuItems:

NavigationView navigationView = findViewById(R.id.nav_view);
Menu menu =  navigationView.getMenu();
MenuItem item = menu.findItem(R.id.item_lists);
SubMenu sbLists = item.getSubMenu();
sbLists.add(0, 0, 0, "Android").setIcon(R.drawable.ic_android);
sbLists.add(0, 1, 0, "iOS").setIcon(R.drawable.ic_ios);

还有:

navigationView.setNavigationItemSelectedListener(
    menuItem -> {
        // set item as selected to persist highlight
        menuItem.setChecked(true);
        // close drawer when item is tapped
        mDrawerLayout.closeDrawers();

当我单击 XML 中添加的项目时,抽屉关闭,如果我再次打开它,我可以看到该项目已被选中。 但是,在 onCreate 中添加的项目,这是我重新打开抽屉后看到的:

点击这个

没了

我尝试在 Stack Overflow 上搜索,只发现一个问题与 Navigation item's title disappeared when clicked 相同的问题,但是,解决方案是将项目文本颜色设置为黑色。这并不能解决项目未被选中的问题,也不能解决图标消失的问题。

请让我知道我做错了什么,谢谢!

编辑: 这是我的主题在 styles.xml 中的样子:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="windowActionModeOverlay">true</item>
    <item name="colorAccent">@color/colorAccent</item>

    <item name="iconColor">@color/icons_light</item>
    <item name="toolbarIconColor">@color/icons_light</item>
    <item name="android:textColorPrimary">@color/primary_text</item>
</style>

【问题讨论】:

  • 它看起来被禁用了,并没有消失。
  • 它被禁用了吗?是否可以点击?
  • @forpas 它没有被禁用。我可以点击它,但没有任何显示。如果我按照类似问题的解决方案(上面链接),那么我可以看到文本。
  • 可能需要在创建item的时候设置item的TextColor并将item添加到Navigation Drawer中。

标签: java android


【解决方案1】:

解决了这个问题。

即使我已经在 XML 中为要添加项目的组声明了 android:checkableBehavior="single"&gt;,我仍然必须为以编程方式添加的每个项目手动执行 setCheckable(true)

subMenu.add(R.id.group_lists, ITEM_ID, ITEM_ORDER, "item").setIcon(R.drawable.ic_list).setCheckable(true);

现在,当我单击在 XML 或 Java 中创建的项目时,图标和文本都可见,该项目被选中。

【讨论】:

    【解决方案2】:

    我认为您需要更改NavigationView 的主题,设置colorPrimary 和文本,colorControlHighlight 设置所选背景元素:

    <style name="ThemeOverlay.AppCompat.myTheme">
        <item name="colorPrimary">@color/color-primary</item>
        <item name="colorControlHighlight">@color/color-primary</item>
    </style>
    

    并将其设置在您的 NavigationView 中:

    <android.support.design.widget.NavigationView
            ...
            app:theme="@style/ThemeOverlay.AppCompat.myTheme">
    

    【讨论】:

    • XML 项目在被选中时会丢失其图标和文本,并由 colorPrimary 填充。而且我仍然无法选择在 Java 中添加的项目:这是一个看起来如何的视频:youtu.be/m0ODuheNik8
    • 因为你使用的主题
    • 好的,我已经在我的问题底部添加了主题。我应该修改什么来启动和运行它?
    • 我回复了,因为我尝试了您的解决方案。我还提供了一段视频,展示了您的解决方案的效果。答案 - 不幸的是,它没有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多