在标签更改

时间:2016-05-10 17:45:28

标签: android navigationview

我有一个带有NavigationView和两个标签ab的应用。 NavigationView中的两个MenuItem对应于标签ab,因此,当选择标签a时,应选择NavigationView MenuItem A,同样为MenuItem {{ 1}}。选择MenuItem BA也应相应地将标签更改为Ba。此处选择表示使用b更改图标和文本的颜色,如下所示:

colors_navigationview.xml:

selector

布局中的NavigationView定义:

<selector xmlns:android="http://schemas.android.com/apk/res/android" >

    <item   android:state_checked="true"
            android:color="@color/red"
            android:drawable="@color/red" />

    <item   android:state_checked="false"
            android:color="@color/gray"
            android:drawable="@color/gray" />

</selector>

MenuItems包含在SubMenu中,定义如下:

my_navigationview.xml

<android.support.design.widget.NavigationView
    android:id="@+id/my_navigationview"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    app:headerLayout="@layout/my_navigationview_header"
    app:menu="@menu/my_navigationview"
    app:itemIconTint="@drawable/colors_navigationview"
    app:itemTextColor="@drawable/colors_navigationview"
    />

问题是,在选择标签<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/navigation_menu" android:title="@string/foo"> <menu> <item android:id="@+id/my_navigationview_tab1" android:icon="@drawable/fooicon" android:title="@string/bar"/> <item android:id="@+id/my_navigationview_tab2" android:icon="@drawable/baricon" android:title="@string/barg"/> </menu> </item> </menu> a时,可以通过直接点击标签或刷选标签的ViewPager,MenuItems b和{ {1}}的颜色更新。然而,直接在NavigationView中选择MenuItems,并且调用完全相同的代码。因此,我有点困惑,为什么这不起作用。

总结:

  1. 在NavigationView中选择MenuItem可设置正确的颜色并更改选项卡。一切都好。
  2. 选择标签会更改标签,但选择的颜色不会更改。我认为MenuItem已设置为已选中,因为A 已被调用。
  3. 我可以尝试解决此问题?我目前处于亏损状态 - 这对IMO来说应该是一件容易的事情。我尝试了以下以及更多:

    1. 来自this问题的各种建议。
    2. 使各种GUI元素失效,还包括NavigationView和DrawerLayout。
    3. 我的活动中的相关方法

      B

1 个答案:

答案 0 :(得分:2)

似乎我找到了一点解决方法。

以下几种方法:

navigationView.getMenu().getItem(indx).setChecked(true);
navigationView.getMenu().findItem(someId).setChecked(true);
navigationView.setCheckedItem(someId);
navigationView.getMenu().performIdentifierAction(someId, 2);

没用。但是,如果您通过调用导航侦听器

来触发事件
onNavigationItemSelected(MenuItem)

它运作的方法。

e.g。在你的应用中:

onNavigationItemSelected(getNavigationMenuItemTab1());