2017-04-24 43 views
1

我有以下菜單的ressource文件(機器人導航抽屜活動產生的)和自定義由我:NavigationView:setCheckedItem不工作的子項

<group android:checkableBehavior="single"> 
    <item 
     android:id="@+id/nav_home" 
     android:icon="@drawable/ic_home_black_24dp"/> 
    <item 
     android:id="@+id/nav_users" 
     android:icon="@drawable/ic_menu_camera" /> 
    <item 
     android:id="@+id/nav_following" 
     android:icon="@drawable/ic_people_black_24dp" /> 
</group> 

<item android:title="Foo"> 
    <menu> 
     <item 
      android:id="@+id/nav_logout" 
      android:icon="@drawable/ic_exit_to_app_black_24dp" /> 
     <item 
      android:id="@+id/nav_licences" 
      android:icon="@drawable/ic_assignment_black_24dp" /> 
     <item 
      android:id="@+id/nav_about" 
      android:icon="@drawable/ic_info_black_24dp" /> 
    </menu> 
</item> 

設置第一高級項目按預期工作:

navigationView.setCheckedItem(R.id.nav_home); 

但將子菜單項設置爲選中狀態,則不執行任何操作。

navigationView.setCheckedItem(R.id.nav_about); 

任何想法?

回答

2

問題在於Android Studio生成的佈局。要檢查子項,我不得不調整佈局是這樣的:

<group android:checkableBehavior="single"> 
    <item 
     android:id="@+id/nav_home" 
     android:icon="@drawable/ic_home_black_24dp"/> 
    <item 
     android:id="@+id/nav_users" 
     android:icon="@drawable/ic_menu_camera" /> 
    <item 
     android:id="@+id/nav_following" 
     android:icon="@drawable/ic_people_black_24dp" /> 
</group> 

<item android:title="Foo"> 
    <menu> 
     <group android:checkableBehavior="single"> 
      <item 
       android:id="@+id/nav_logout" 
       android:icon="@drawable/ic_exit_to_app_black_24dp" /> 
      <item 
       android:id="@+id/nav_licences" 
       android:icon="@drawable/ic_assignment_black_24dp" /> 
      <item 
       android:id="@+id/nav_about" 
       android:icon="@drawable/ic_info_black_24dp" /> 
     </group> 
    </menu> 
</item> 

0

如果你想選擇在onCreate方法抽屜式導航欄或應用程序中的其他地方的項目,你可以使用下面的代碼:

navigationView.getMenu()的getItem(0) .setChecked(真);

爲getItem(INT指數)方法獲取菜單項,那麼你可以調用setChecked(真);對菜單項,你剩下要做的一切就是找出哪些元素索引確實默認已和更換該索引爲0。

你可以通過調用

onNavigationItemSelected選擇(高亮顯示)項目(navigationView.getMenu()的getItem(0));


您可以參考這個還有:

NavigationView with DrawerLayout setCheckedItem not working

你也可以添加菜單:

<group 
    android:checkableBehavior="single"> 

    <item 
     android:id="@+id/nav_home" 
     android:icon="@drawable/ic_home_black_24dp"/> 

    <item 
     android:id="@+id/nav_users" 
     android:icon="@drawable/ic_menu_camera" /> 

    <item 
     android:id="@+id/nav_following" 
     android:icon="@drawable/ic_people_black_24dp" /> 
</group> 

<group 
    android:checkableBehavior="single"> 

    <item 
     android:id="@+id/nav_logout" 
     android:icon="@drawable/ic_exit_to_app_black_24dp" /> 
    <item 
     android:id="@+id/nav_licences" 
     android:icon="@drawable/ic_assignment_black_24dp" /> 
    <item 
     android:id="@+id/nav_about" 
     android:icon="@drawable/ic_info_black_24dp" /> 
</group> 

1

它的,因爲他們不是組標籤下,和他們沒有的android:checkableBehavior="single"財產。

修改你的代碼爲

<item android:title="Foo"> 
<menu> 
    <group android:checkableBehavior="single"> 
     <item 
      android:id="@+id/nav_logout" 
      android:icon="@drawable/ic_exit_to_app_black_24dp" /> 
     <item 
      android:id="@+id/nav_licences" 
      android:icon="@drawable/ic_assignment_black_24dp" /> 
     <item 
      android:id="@+id/nav_about" 
      android:icon="@drawable/ic_info_black_24dp" /> 
    </group> 
</menu> 

希望這有助於。

0

試試這個解決方案...

使用兩行代碼,一個是用於導航抽屜檢查項目和第二個是選擇子菜單項的。

navigationView.setCheckedItem(R.id.nav_about); 
onNavigationItemSelected(navigationView.getMenu().getItem(3).getSubMenu().getItem(2));