2016-12-29 63 views
0

我在這裏有一個情況。我在抽屜裏有14個(菜單和子菜單)。但是,當我檢查使用navigationView.getMenu().size();它的大小隻有返回5.NavigationView沒有檢測到所有項目

這裏我設置DrawerLayout:

<android.support.v4.widget.DrawerLayout 
    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:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:openDrawer="start"> 

<include 
    layout="@layout/app_bar_main" 
    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" 
    app:menu="@menu/nav_menu_item" /> 

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

nav_menu_item:

<group android:checkableBehavior="single"> 
    <item 
     android:id="@+id/nav_home" 
     android:icon="@drawable/ic_announcement" 
     android:title="@string/nav_announce" /> 

    <item 
     android:id="@+id/nav_complaint" 
     android:icon="@drawable/ic_book" 
     android:title="@string/nav_complaint" /> 

    <item 
     android:id="@+id/nav_my_billing" 
     android:icon="@drawable/ic_list" 
     android:title="@string/nav_my_billing" /> 
</group> 

<item android:title="Customer Service"> 
    <menu> 
     <group android:checkableBehavior="single"> 
      <item 
       android:id="@+id/nav_apply" 
       android:title="@string/nav_apply" 
       android:icon="@drawable/ic_content_copy"/> 
      <item 
       android:id="@+id/nav_disconnect" 
       android:title="@string/nav_disconnect" 
       android:icon="@drawable/ic_content_cut"/> 
      <item 
       android:id="@+id/nav_ownership" 
       android:title="@string/nav_ownership" 
       android:icon="@drawable/ic_people"/> 
      <item 
       android:id="@+id/nav_meter" 
       android:title="@string/nav_meter" 
       android:icon="@drawable/ic_ac_unit"/> 
      <item 
       android:id="@+id/nav_reconnect" 
       android:title="@string/nav_reconnect" 
       android:icon="@drawable/ic_vibration"/> 
     </group> 
    </menu> 
</item> 


<item android:title="Customer Information"> 
    <menu> 
     <group android:checkableBehavior="single"> 
      <item 
       android:id="@+id/nav_meter_read" 
       android:title="@string/nav_meter_read" 
       android:icon="@drawable/ic_chrome_reader_mode"/> 
      <item 
       android:id="@+id/nav_role" 
       android:title="@string/nav_role" 
       android:icon="@drawable/ic_people"/> 
      <item 
       android:id="@+id/nav_water" 
       android:title="@string/nav_water" 
       android:icon="@drawable/ic_label_outline"/> 
      <item 
       android:id="@+id/nav_billing" 
       android:title="@string/nav_billing" 
       android:icon="@drawable/ic_sync"/> 
      <item 
       android:id="@+id/nav_tariff" 
       android:title="@string/nav_tariff" 
       android:icon="@drawable/ic_assessment"/> 
      <item 
       android:id="@+id/nav_payment" 
       android:title="@string/nav_payment" 
       android:icon="@drawable/ic_payment"/> 
      <item 
       android:id="@+id/nav_plumber" 
       android:title="@string/nav_plumber" 
       android:icon="@drawable/ic_perm_contact_calendar"/> 
     </group> 
    </menu> 
</item> 

的Java:

public static int navItemIndex = 0; 


drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
navigationView = (NavigationView) findViewById(R.id.nav_view); 
navHeader = navigationView.getHeaderView(0); 


private void loadHomeFragment() { 

     navigationView.getMenu().getItem(navItemIndex).setChecked(true); 

     Runnable mPendingRunnable = new Runnable() { 
      @Override 
      public void run() { 
       Fragment fragment = getHomeFragment(); 
       FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
       fragmentTransaction.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out); 
       fragmentTransaction.replace(R.id.frame, fragment, CURRENT_TAG); 
       fragmentTransaction.commitAllowingStateLoss(); 
      } 
     }; 

     if (mPendingRunnable != null) { 
      mHandler.post(mPendingRunnable); 
     } 

     drawer.closeDrawers(); 

     invalidateOptionsMenu(); 
    } 


    private Fragment getHomeFragment() { 
    switch (navItemIndex) { 
     case 0: 
      // home 
      AnnouncementFragment announcementFragment = new AnnouncementFragment(); 
      return announcementFragment; 
     case 1: 
      // complaint 
      ComplaintFragment complaintFragment = new ComplaintFragment(); 
      return complaintFragment; 
     case 2: 
      // my billing 
      MyBillingFragment billFragment = new MyBillingFragment(); 
      return billFragment; 
     case 3: 
      // general fragment 
      return new GeneralFormFragment(); 
     case 4: 
      // general fragment 
      return new GeneralFormFragment(); 
     case 5: 
      // general fragment 
      return new GeneralFormFragment(); 
     case 6: 
      // general fragment 
      return new GeneralFormFragment(); 
     case 7: 
      // general fragment 
      return new GeneralFormFragment(); 
     case 8: 
      // general fragment 
      return new GeneralFormFragment(); 
     case 9: 
      // general fragment 
      return new GeneralFormFragment(); 
     case 10: 
      // general fragment 
      return new GeneralFormFragment(); 
     case 11: 
      // general fragment 
      return new GeneralFormFragment(); 
     case 12: 
      // general fragment 
      return new GeneralFormFragment(); 
     case 13: 
      // general fragment 
      return new GeneralFormFragment(); 
     case 14: 
      // general fragment 
      return new GeneralFormFragment(); 

     default: 
      return new AnnouncementFragment(); 
    } 
} 


    private void setUpNavigationView() { 

    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 

     @Override 
     public boolean onNavigationItemSelected(MenuItem menuItem) { 

      switch (menuItem.getItemId()) { 

       case R.id.nav_home: 
        navItemIndex = 0; 
        CURRENT_TAG = TAG_HOME; 
        break; 

       case R.id.nav_complaint: 
        navItemIndex = 1; 
        CURRENT_TAG = TAG_COMPLAINT; 
        break; 

       case R.id.nav_my_billing: 
        navItemIndex = 2; 
        CURRENT_TAG = TAG_MY_BILLING; 
        break; 

       case R.id.nav_apply: 
        navItemIndex = 3; 
        CURRENT_TAG = TAG_DISCONNECT; 
        break; 

       case R.id.nav_disconnect: 
        navItemIndex = 4; 
        CURRENT_TAG = TAG_DISCONNECT; 
        break; 

       case R.id.nav_ownership: 
        navItemIndex = 5; 
        CURRENT_TAG = TAG_DISCONNECT; 
        break; 

       case R.id.nav_meter: 
        navItemIndex = 6; 
        CURRENT_TAG = TAG_DISCONNECT; 
        break; 

       case R.id.nav_reconnect: 
        navItemIndex = 7; 
        CURRENT_TAG = TAG_DISCONNECT; 
        break; 

       case R.id.nav_meter_read: 
        navItemIndex = 8; 
        CURRENT_TAG = TAG_DISCONNECT; 
        break; 

       case R.id.nav_role: 
        navItemIndex = 9; 
        CURRENT_TAG = TAG_DISCONNECT; 
        break; 

       case R.id.nav_water: 
        navItemIndex = 10; 
        CURRENT_TAG = TAG_DISCONNECT; 
        break; 

       case R.id.nav_billing: 
        navItemIndex = 11; 
        CURRENT_TAG = TAG_DISCONNECT; 
        break; 

       case R.id.nav_tariff: 
        navItemIndex = 12; 
        CURRENT_TAG = TAG_DISCONNECT; 
        break; 

       case R.id.nav_payment: 
        navItemIndex = 13; 
        CURRENT_TAG = TAG_DISCONNECT; 
        break; 

       case R.id.nav_plumber: 
        navItemIndex = 14; 
        CURRENT_TAG = TAG_DISCONNECT; 
        break; 

       default: 
        navItemIndex = 0; 
      } 

      loadHomeFragment(); 

      return true; 
     } 
    }); 

} 

錯誤:

java.lang.IndexOutOfBoundsException:指數:5,大小:5 在java.util.ArrayList.get(ArrayList.java:411 ) at android.support.v7.view.menu.MenuBuilder.getItem(MenuBuilder.java:729) at app.swb.mont.ui.activity.MainActivity.selectNavMenu(MainActivity.java:270) at app.swb .mont.ui.activity.MainActivity.load HomeFragment(MainActivity.java:163)

問題是navigationView只檢測5項。我已經建立並清理了該項目,但仍然失敗。看起來像缺少一些東西。

任何幫助表示讚賞和非常感謝。

+0

顯示您的抽屜創建代碼 –

+0

@VivekMishra按要求完成。 – Nizzam

+0

您的抽屜菜單包含3個項目組和外部2個項目。其他項目嵌套在其他兩項內的菜單標籤內。因此,導航菜單的子女人數是5,這是它返回的結果 – akash93

回答

0

這就是我的意思。

<group android:checkableBehavior="single"> 
    <item 
     android:id="@+id/nav_home" 
     android:icon="@drawable/ic_announcement" 
     android:title="@string/nav_announce" /> 

    <item 
     android:id="@+id/nav_complaint" 
     android:icon="@drawable/ic_book" 
     android:title="@string/nav_complaint" /> 

    <item 
     android:id="@+id/nav_my_billing" 
     android:icon="@drawable/ic_list" 
     android:title="@string/nav_my_billing" /> 
</group> 

<item android:title="Customer Service"> 
    <menu> 
      <item 
       android:id="@+id/nav_apply" 
       android:title="@string/nav_apply" 
       android:icon="@drawable/ic_content_copy"/> 
      <item 
       android:id="@+id/nav_disconnect" 
       android:title="@string/nav_disconnect" 
       android:icon="@drawable/ic_content_cut"/> 
      <item 
       android:id="@+id/nav_ownership" 
       android:title="@string/nav_ownership" 
       android:icon="@drawable/ic_people"/> 
      <item 
       android:id="@+id/nav_meter" 
       android:title="@string/nav_meter" 
       android:icon="@drawable/ic_ac_unit"/> 
      <item 
       android:id="@+id/nav_reconnect" 
       android:title="@string/nav_reconnect" 
       android:icon="@drawable/ic_vibration"/> 
    </menu> 
</item> 


<item android:title="Customer Information"> 
    <menu> 
      <item 
       android:id="@+id/nav_meter_read" 
       android:title="@string/nav_meter_read" 
       android:icon="@drawable/ic_chrome_reader_mode"/> 
      <item 
       android:id="@+id/nav_role" 
       android:title="@string/nav_role" 
       android:icon="@drawable/ic_people"/> 
      <item 
       android:id="@+id/nav_water" 
       android:title="@string/nav_water" 
       android:icon="@drawable/ic_label_outline"/> 
      <item 
       android:id="@+id/nav_billing" 
       android:title="@string/nav_billing" 
       android:icon="@drawable/ic_sync"/> 
      <item 
       android:id="@+id/nav_tariff" 
       android:title="@string/nav_tariff" 
       android:icon="@drawable/ic_assessment"/> 
      <item 
       android:id="@+id/nav_payment" 
       android:title="@string/nav_payment" 
       android:icon="@drawable/ic_payment"/> 
      <item 
       android:id="@+id/nav_plumber" 
       android:title="@string/nav_plumber" 
       android:icon="@drawable/ic_perm_contact_calendar"/> 
    </menu> 
</item> 
+0

'java.lang.IndexOutOfBoundsException:Index:5,Size:5'仍然是錯誤。此外,項目的選擇是不正確的。它會突出顯示所有被點擊的項目。 – Nizzam

+0

這很奇怪..我試過一個沒有任何問題的示例項目..你可以看看https:// github。com/chrisbanes/cheesesquare來查看是否有任何差異導致錯誤 – akash93

+0

也嘗試在'getItem'之前設置斷點來查看nav菜單包含的內容 – akash93