我在這裏有一個情況。我在抽屜裏有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項。我已經建立並清理了該項目,但仍然失敗。看起來像缺少一些東西。
任何幫助表示讚賞和非常感謝。
顯示您的抽屜創建代碼 –
@VivekMishra按要求完成。 – Nizzam
您的抽屜菜單包含3個項目組和外部2個項目。其他項目嵌套在其他兩項內的菜單標籤內。因此,導航菜單的子女人數是5,這是它返回的結果 – akash93