以编程方式设置导航抽屉中列表项的选定属性

时间:2017-04-15 14:31:55

标签: android navigation-drawer

在我的应用程序中,导航抽屉中有两个项目代表两种模式:

1)所有国家的测验 2)最喜欢的测验

当用户选择Favorite Quiz模式时,应用程序将检查特定条件。我想要的是如果条件失败,那么我想以编程方式设置All Countries Quiz列表项的selected属性进行检查。基本上,如果第二种模式的条件失败,它应该恢复到第一种模式。

这样的事情:

1)用户当前正在开启 - 所有国家/地区测验模式

enter image description here

2)现在用户点击 - 收藏测验模式。如果条件为真,则一切正常,选择器切换到第二模式:

enter image description here

3)但如果条件失败,则选择不应移至第二模式并应保持在第一模式:

enter image description here

以下是导航抽屉上项目的菜单列表代码:

<group android:checkableBehavior="single">
    <item
            android:id="@+id/nav_quiz_all"
            android:icon="@drawable/ic_public_black_24dp"
            android:checked="true"
            android:title="All Countries Quiz"/>
    <item
            android:id="@+id/nav_quiz_bookmarked"
            android:icon="@drawable/ic_favorite_black_24dp"
            android:title="Favorite Quiz"/>
</group>


<item android:title="Communicate">
    <menu>
        <item
            android:id="@+id/nav_rate"
            android:icon="@drawable/ic_star_black_24dp"
            android:title="Rate this app"/>
        <item
            android:id="@+id/nav_share"
            android:icon="@drawable/ic_share_black_24dp"
            android:title="Share"/>
        <item
            android:id="@+id/nav_feedback"
            android:icon="@drawable/ic_feedback_black_24dp"
            android:title="Feedback"/>
        <item
            android:id="@+id/nav_about"
            android:icon="@drawable/ic_info_black_24dp"
            android:title="About"/>
    </menu>
</item>


<item
    android:id="@+id/nav_settings"
    android:icon="@drawable/ic_settings_black_24dp"
    android:title="Settings"/>

1 个答案:

答案 0 :(得分:1)

您可以使用setCheckedItem()

NavigationView方法

代码片段:

 @Override
public boolean onNavigationItemSelected(MenuItem item) {
  if(condition){
      mNavigationView.setCheckedItem(R.id.nav_item);  //yOur Item
    }
    mNavigationView.setCheckedItem(item.getItemId());

}

修改

您可以使用以下代码段:在条件适用时在您的活动中调用它。

mNavigationView.post(new Runnable() {
    @Override
    public void run() {
        navigationView.setCheckedItem(R.id.nav_item);
    }
});