2016-01-22 33 views
4

我在DrawerLayout中將以下activity_nav_drawer_drawer.xml作爲應用程序的菜單:NavigationView。NavigationView/DrawerLayout中的獨立checkableBehavior =「單個」組

<?xml version="1.0" encoding="utf-8"?> 

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

    <group android:id="@+id/nav_group_features" 
      android:checkableBehavior="single"> 

     <item android:id="@+id/nav_feature1" 
       android:icon="@drawable/ic_build_black" 
       android:title="Feature 1"/> 

     <item android:id="@+id/nav_feature2" 
       android:icon="@drawable/ic_account_balance_black" 
       android:title="Feature 2"/> 

     <item android:id="@+id/nav_feature3" 
       android:icon="@drawable/ic_folder_black" 
       android:title="Feature 3"/> 

    </group> 

    <item android:title="Select Project"> 
     <group android:id="@+id/nav_group_projects" 
       android:checkableBehavior="single"> 

      <item android:id="@+id/nav_project1" 
        android:icon="@drawable/ic_domain_black" 
        android:title="Project 1"/> 

      <item android:id="@+id/nav_project2" 
        android:icon="@drawable/ic_domain_black" 
        android:title="Project 2"/> 

      <item android:id="@+id/nav_project3" 
        android:icon="@drawable/ic_domain_black" 
        android:title="Project 3"/> 

     </group> 
    </item> 

</menu> 

這裏是包含DrawerLayout。

<?xml version="1.0" encoding="utf-8"?> 

<android.support.v4.widget.DrawerLayout android:id="@+id/drawer_layout" 
             xmlns:android="http://schemas.android.com/apk/res/android" 
             xmlns:app="http://schemas.android.com/apk/res-auto" 
             xmlns:tools="http://schemas.android.com/tools" 
             android:layout_width="match_parent" 
             android:layout_height="match_parent" 
             android:fitsSystemWindows="true" 
             tools:openDrawer="start"> 

    <include layout="@layout/app_bar_nav_drawer" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"/> 

    <android.support.design.widget.NavigationView android:id="@+id/nav_view" 
                android:layout_width="wrap_content" 
                android:layout_height="match_parent" 
                android:layout_gravity="start" 
                android:fitsSystemWindows="true" 
                app:headerLayout="@layout/nav_header_nav_drawer" 
                app:menu="@menu/activity_nav_drawer_drawer"/> 

</android.support.v4.widget.DrawerLayout> 

活動實現了NavigationView.OnNavigationItemSelectedListener與流動的聽衆。

@SuppressWarnings("StatementWithEmptyBody") 
@Override 
public boolean onNavigationItemSelected(MenuItem item) { 
    return true; 
} 

問題是如果從一個組中選擇一個項目,它將取消選擇另一個組中的所選項目。我需要每個組都有獨立的選擇。你怎麼做到這一點?

回答

4

對我來說,它看起來像一個在NavigationView本身的錯誤,並且Google的bugtracker中有幾個類似的問題(如this one或this)。

enter image description here

然而,你可以將其存檔,這樣做:

  • 跟蹤先前選擇MenuItem S的各組
  • 一旦項目點擊 - 取消該組先前檢查元素並檢查新的
  • 從xml中刪除android:checkableBehavior併爲每個添加android:checkable="true"MenuItem

有實際執行:

MenuItem selectedFeature, selectedProject; 

@SuppressWarnings("StatementWithEmptyBody") 
@Override 
public boolean onNavigationItemSelected(MenuItem item) { 
    if (item.getGroupId() == R.id.group_feature) { 
     if (selectedFeature != null) { 
      selectedFeature.setChecked(false); 
     } 
     selectedFeature = item; 
     selectedFeature.setChecked(true); 
    } else if (item.getGroupId() == R.id.group_projects) { 
     if (selectedProject != null) { 
      selectedProject.setChecked(false); 
     } 
     selectedProject = item; 
     selectedProject.setChecked(true); 
    } 

    return false; 
} 

而且activity_main_drawer.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <group 
     android:id="@+id/group_feature"> 
     <item android:id="@+id/nav_feature1" 
      android:icon="@drawable/ic_menu_camera" 
      android:checkable="true" 
      android:title="Feature 1"/> 
     <item android:id="@+id/nav_feature2" 
      android:icon="@drawable/ic_menu_gallery" 
      android:checkable="true" 
      android:title="Feature 2"/> 
     <item android:id="@+id/nav_feature3" 
      android:icon="@drawable/ic_menu_slideshow" 
      android:checkable="true" 
      android:title="Feature 3"/> 
    </group> 
    <item android:title="Select Project"> 
     <menu> 
      <group 
       android:id="@+id/group_projects"> 
       <item android:id="@+id/nav_project1" 
        android:icon="@drawable/ic_menu_manage" 
        android:checkable="true" 
        android:title="Project 1"/> 
       <item android:id="@+id/nav_project2" 
        android:icon="@drawable/ic_menu_share" 
        android:checkable="true" 
        android:title="Project 2"/> 
       <item android:id="@+id/nav_project3" 
        android:icon="@drawable/ic_menu_send" 
        android:checkable="true" 
        android:title="Project 3"/> 
      </group> 
     </menu> 
    </item> 
</menu> 

我希望,它有助於

+0

望着bug報告,他們並不完全是這樣。你認爲我應該提交NavigationView類的功能請求嗎? –

+0

@MarcM。好吧..總是值得去嘗試,但不要太投入太多的希望 - 從我的經驗來看,他們的反應並不敏捷(儘管考慮到他們獲得的請求的數量 - 這是可以理解的) –

+0

另外,從來沒有說過,但很好的答案。萬分感謝,工作順利,工作順利,相當乾淨。 –