2017-04-12 88 views
0

我得到错误,当我单击LoginFragment.When时,我删除loginFragment。 它工作正常。 如何更改添加更多片段的长度。我无法添加新的片段。java.lang.ArrayIndexOutOfBoundsException:length = 5;索引= 5?我想在导航抽屉中添加片段

MainActivity.java

public class MainActivity extends AppCompatActivity { 
private static final String TAG_HOME = "home"; 
private static final String TAG_PHOTOS = "photos"; 
private static final String TAG_MOVIES = "movies"; 
private static final String TAG_NOTIFICATIONS = "notifications"; 
private static final String TAG_SETTINGS = "settings"; 
private static final String TAG_LOGIN = "login"; 


public static int navItemIndex = 0; 
public static String CURRENT_TAG = TAG_HOME; 
private NavigationView navigationView; 
private DrawerLayout drawer; 


private Toolbar toolbar; 
private String[] activityTitles; 

// flag to load home fragment when user presses back key 
    private boolean shouldLoadHomeFragOnBackPress = true; 
    private Handler mHandler; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    mHandler = new Handler(); 

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


    // Navigation view header 


    // load toolbar titles from string resources 
    activityTitles = getResources().getStringArray(R.array.nav_item_activity_titles); 


    // load nav menu header data 


    // initializing navigation menu 
    setUpNavigationView(); 

    if (savedInstanceState == null) { 
     navItemIndex = 0; 
     CURRENT_TAG = TAG_HOME; 
     loadHomeFragment(); 
    } 
} 


private void loadHomeFragment() { 
    // selecting appropriate nav menu item 
    selectNavMenu(); 

    // set toolbar title 
    setToolbarTitle(); 

    // if user select the current navigation menu again, don't do anything 
    // just close the navigation drawer 
    if (getSupportFragmentManager().findFragmentByTag(CURRENT_TAG) != null) { 
     drawer.closeDrawers(); 

     // show or hide the fab button 

     return; 
    } 


    Runnable mPendingRunnable = new Runnable() { 
     @Override 
     public void run() { 
      // update the main content by replacing fragments 
      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 is not null, then add to the message queue 
    if (mPendingRunnable != null) { 
     mHandler.post(mPendingRunnable); 
    } 
    //Closing drawer on item click 
    drawer.closeDrawers(); 

    // refresh toolbar menu 
    invalidateOptionsMenu(); 
} 

private Fragment getHomeFragment() { 
    switch (navItemIndex) { 
     case 0: 
      // home 
      HomeFragment homeFragment = new HomeFragment(); 
      return homeFragment; 
     case 1: 
      // photos 
      PhotosFragment photosFragment = new PhotosFragment(); 
      return photosFragment; 
     case 2: 
      // movies fragment 
      MoviesFragment moviesFragment = new MoviesFragment(); 
      return moviesFragment; 
     case 3: 
      // notifications fragment 
      NotificationsFragment notificationsFragment = new NotificationsFragment(); 
      return notificationsFragment; 

     case 4: 
      // settings fragment 
      SettingsFragment settingsFragment = new SettingsFragment(); 
      return settingsFragment; 
     case 5: 
      // ic_login_black_24dp fragment 
      LoginFragment loginFragment = new LoginFragment(); 
      return loginFragment; 

     default: 
      return new HomeFragment(); 
    } 
} 

private void setToolbarTitle() { 
    getSupportActionBar().setTitle(activityTitles[navItemIndex]); 
} 

private void selectNavMenu() { 
    navigationView.getMenu().getItem(navItemIndex).setChecked(true); 
} 

private void setUpNavigationView() { 
    //Setting Navigation View Item Selected Listener to handle the item click of the navigation menu 
    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 

     // This method will trigger on item Click of navigation menu 
     @Override 
     public boolean onNavigationItemSelected(MenuItem menuItem) { 

      //Check to see which item was being clicked and perform appropriate action 
      switch (menuItem.getItemId()) { 
       //Replacing the main content with ContentFragment Which is our Inbox View; 
       case R.id.home: 
        navItemIndex = 0; 
        CURRENT_TAG = TAG_HOME; 
        break; 
       case R.id.nav_photos: 
        navItemIndex = 1; 
        CURRENT_TAG = TAG_PHOTOS; 
        break; 
       case R.id.nav_movies: 
        navItemIndex = 2; 
        CURRENT_TAG = TAG_MOVIES; 
        break; 
       case R.id.nav_notifications: 
        navItemIndex = 3; 
        CURRENT_TAG = TAG_NOTIFICATIONS; 
        break; 
       case R.id.nav_settings: 
        navItemIndex = 4; 
        CURRENT_TAG = TAG_SETTINGS; 
        break; 
       case R.id.nav_login: 
        navItemIndex = 5; 
        CURRENT_TAG = TAG_LOGIN; 
        break; 


       default: 
        navItemIndex = 0; 
      } 

      //Checking if the item is in checked state or not, if not make it in checked state 
      if (menuItem.isChecked()) { 
       menuItem.setChecked(false); 
      } else { 
       menuItem.setChecked(true); 
      } 
      menuItem.setChecked(true); 

      loadHomeFragment(); 

      return true; 
     } 
    }); 


    ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.openDrawer, R.string.closeDrawer) { 

     @Override 
     public void onDrawerClosed(View drawerView) { 
      // Code here will be triggered once the drawer closes as we dont want anything to happen so we leave this blank 
      super.onDrawerClosed(drawerView); 
     } 

     @Override 
     public void onDrawerOpened(View drawerView) { 
      // Code here will be triggered once the drawer open as we dont want anything to happen so we leave this blank 
      super.onDrawerOpened(drawerView); 
     } 
    }; 

    //Setting the actionbarToggle to drawer layout 
    drawer.setDrawerListener(actionBarDrawerToggle); 

    //calling sync state is necessary or else your hamburger icon wont show up 
    actionBarDrawerToggle.syncState(); 
} 

@Override 
public void onBackPressed() { 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawers(); 
     return; 
    } 

    // This code loads home fragment when back key is pressed 
    // when user is in other fragment than home 
    if (shouldLoadHomeFragOnBackPress) { 
     // checking if user is on other navigation menu 
     // rather than home 
     if (navItemIndex != 0) { 
      navItemIndex = 0; 
      CURRENT_TAG = TAG_HOME; 
      loadHomeFragment(); 
      return; 
     } 
    } 

    super.onBackPressed(); 
} 
} 

activity_main_drawer.xml

<group android:checkableBehavior="single"> 
    <item 
     android:id="@+id/nav_home" 
     android:icon="@drawable/ic_home_black_24dp" 
     android:title="@string/nav_home" /> 
    <item 
     android:id="@+id/nav_photos" 
     android:icon="@drawable/ic_photo_library_black_24dp" 
     android:title="@string/nav_photos" /> 
    <item 
     android:id="@+id/nav_movies" 
     android:icon="@drawable/ic_local_movies_black_24dp" 
     android:title="@string/nav_movies" /> 

    <item 
     android:id="@+id/nav_notifications" 
     android:icon="@drawable/ic_notifications_black_24dp" 
     android:title="@string/nav_notifications" /> 

    <item 
     android:id="@+id/nav_settings" 
     android:icon="@drawable/ic_settings_black_24dp" 
     android:title="@string/nav_settings" /> 
    <item 
     android:id="@+id/nav_login" 
     android:icon="@drawable/ic_login_black_24dp" 
     android:title="login" /> 

</group> 

activity_main.xml中

<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_main" 
    app:menu="@menu/activity_main_drawer" /> 

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

app_bar_main.xml

<android.support.design.widget.CoordinatorLayout 
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:context="info.androidhive.navigationdrawer.activity.MainActivity"> 

<android.support.design.widget.AppBarLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/AppTheme.AppBarOverlay"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="?attr/colorPrimary" 
     app:popupTheme="@style/AppTheme.PopupOverlay" /> 

</android.support.design.widget.AppBarLayout> 

<FrameLayout 
    android:id="@+id/frame" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 
</FrameLayout> 
</android.support.design.widget.CoordinatorLayout> 

nav_header_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:id="@+id/view_container" 
android:layout_width="match_parent" 
android:layout_height="@dimen/nav_header_height" 
android:gravity="bottom" 
android:orientation="vertical" 
android:theme="@style/ThemeOverlay.AppCompat.Dark"> 

<ImageView 
    android:id="@+id/img_header_bg" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:scaleType="fitXY" 
    android:src="@mipmap/ic_launcher" /> 

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerVertical="true" 
    android:orientation="vertical" 
    android:padding="@dimen/activity_horizontal_margin"> 

    <ImageView 
     android:id="@+id/img_profile" 
     android:layout_width="@dimen/profile_width" 
     android:layout_height="@dimen/profile_height" 
     android:paddingTop="@dimen/nav_header_vertical_spacing" 
     app:srcCompat="@android:drawable/sym_def_app_icon" /> 

    <TextView 
     android:id="@+id/namea" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:paddingTop="@dimen/nav_header_vertical_spacing" 
     android:textAppearance="@style/TextAppearance.AppCompat.Body1" /> 

    <TextView 
     android:id="@+id/website" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 

+0

您需要将您的问题缩小到特定范围fic地区。 –

+0

请将您的堆栈跟踪与异常 –

+0

请问您能否将此异常的堆栈跟踪添加到此问题中? – dirceusemighini

回答

0

java.lang.ArrayIndexOutOfBoundsException:长度= 5;索引= 5?

貌似异常发生在你拨打:

getSupportActionBar().setTitle(activityTitles[navItemIndex]); 

navItemIndex具有范围从0至5(AE长度6)当activityTitles仅具有5个项目

解决方案:

集6件商品为activityTitles