Tell me please, how in this code can I remove an extra item?

private void onItemClickListerner(int position, View view) { Intent intent = null; switch (position) { case AppConstants.MENU_1: intent = new Intent(mContext, SettingsActivity.class); startActivity(intent); mDrawerLayout.closeDrawers(); break; case AppConstants.MENU_2: doCall(); mDrawerLayout.closeDrawers(); break; case AppConstants.MENU_3: sendEmail(); mDrawerLayout.closeDrawers(); break; case AppConstants.MENU_4: shareClicked(getString(R.string.share_subject), AndroidWebsiteApplication.getAppUrl()); mDrawerLayout.closeDrawers(); break; case AppConstants.MENU_5: intent = new Intent(mContext, ContactUsActivity.class); startActivity(intent); mDrawerLayout.closeDrawers(); break; case AppConstants.MENU_6: intent = new Intent(mContext, AboutActivity.class); startActivity(intent); mDrawerLayout.closeDrawers(); break; case AppConstants.MENU_7: intent = new Intent(mContext, AboutActivity.class); startActivity(intent); mDrawerLayout.closeDrawers(); break; case AppConstants.MENU_8: showCustomDialog(getString(R.string.confirmation), getString(R.string.exit_msg), getString(R.string.yes), getString(R.string.no), false); mDrawerLayout.closeDrawers(); break; } 

For a simple removal, the application crashes. I'm trying to remove the 6th item. So written in AppConstant.java

  // Sliding option menu public static final int MENU_1 = 0; public static final int MENU_2 = 1; public static final int MENU_3 = 2; public static final int MENU_4 = 3; public static final int MENU_5 = 4; public static final int MENU_6 = 5; public static final int MENU_7 = 6; public static final int MENU_8 = 7; 

And so in XML

  <string-array name="nav_drawer_items"> <item>Настройки</item> <item>Позвонить</item> <item>Письмо</item> <item>Поделиться</item> <item>Фотоальбом</item> <item>Карта</item> <item>Выход</item> </string-array> 

If, for example, I remove the line in the first passage of the code, then the whole menu is shifted by 1 position and for example, instead of the card, there will be an exit

Call

 /** * Method to show toolbar and drawer layout */ private void showToolbar() { mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerList = (ListView) findViewById(R.id.list_slidermenu); mToolbar = (Toolbar) findViewById(R.id.toolbar); if (mToolbar != null) { setSupportActionBar(mToolbar); } mToolbar.setTitleTextAppearance(mContext, R.style.TitleTextStyle); mDrawerToggle = new ActionBarDrawerToggle(HomeActivity.this, mDrawerLayout, mToolbar, R.string.app_name, R.string.app_name); mDrawerLayout.setDrawerListener(mDrawerToggle); mNavMenuTitles = getResources() .getStringArray(R.array.nav_drawer_items); mNavMenuIcons = getResources().obtainTypedArray( R.array.nav_drawer_icons); mNavDrawerItems = new ArrayList<NavDrawerItem>(); mNavDrawerItems.add(new NavDrawerItem(mNavMenuTitles[0], mNavMenuIcons .getResourceId(0, -1))); mNavDrawerItems.add(new NavDrawerItem(mNavMenuTitles[1], mNavMenuIcons .getResourceId(1, -1))); mNavDrawerItems.add(new NavDrawerItem(mNavMenuTitles[2], mNavMenuIcons .getResourceId(2, -1))); mNavDrawerItems.add(new NavDrawerItem(mNavMenuTitles[3], mNavMenuIcons .getResourceId(3, -1))); mNavDrawerItems.add(new NavDrawerItem(mNavMenuTitles[4], mNavMenuIcons .getResourceId(4, -1))); mNavDrawerItems.add(new NavDrawerItem(mNavMenuTitles[5], mNavMenuIcons .getResourceId(5, -1))); mNavDrawerItems.add(new NavDrawerItem(mNavMenuTitles[6], mNavMenuIcons .getResourceId(6, -1))); mNavDrawerItems.add(new NavDrawerItem(mNavMenuTitles[7], mNavMenuIcons .getResourceId(7, -1))); mNavMenuIcons.recycle(); mDrawerList.setOnItemClickListener(new SlideMenuClickListener()); mMenuAdapter = new MenuAdapter(HomeActivity.this); mMenuAdapter.setList(mNavDrawerItems); mDrawerList.setAdapter(mMenuAdapter); } /** * Slide menu item click listener * */ private class SlideMenuClickListener implements ListView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { onItemClickListerner(position, view); } } 
  • What is your menu? Add code as you initialize it. If you are trying to make NavigationDrawer , then simply create a new activity from the studio with such a template and see how it is implemented there. - eugeneek
  • @eugeneek, if understood correctly, then added to the post. - Nasdomlan Urban3p

1 answer 1

It is necessary to make a switch not by position, but by some parameter of the menu item itself. For example by title:

 switch (mNavDrawerItems.get(position).title) { // или как у вас называется это поле case mNavMenuTitles[AppConstants.MENU_1]: intent = new Intent(mContext, SettingsActivity.class); startActivity(intent); mDrawerLayout.closeDrawers(); break; case mNavMenuTitles[AppConstants.MENU_2]: doCall(); mDrawerLayout.closeDrawers(); break; ... } 

And to programmatically remove some item:

 mNavDrawerItems.remove(6); mMenuAdapter.notifyDataSetChnged(); 

After that, the order of the menu items should not be lost.

  • Hm, so I already tried, there is a hail of mistakes. I will try to figure it out, thanks - Nasdomlan Urban3p
  • What kind of mistakes? - eugeneek