Android Studio issues a warning (method length = 20) that the onNavigationItemSelected method (length = 21) below contains a long code. Is there a way to shorten the code?

@Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { int itemId = item.getItemId(); if (itemId == R.id.nav_catalog) { runActivity(CatalogActivity.class); return false; } else if (itemId == R.id.nav_new_chapters) { runFragment(NewChaptersFragment.class.getName()); } else if (itemId == R.id.nav_bookmarks) { runFragment(BookmarksFragment.class.getName()); } else if (itemId == R.id.nav_search) { runFragment(SearchFragment.class.getName()); } else if (itemId == R.id.navigationFavoritesUser) { runFragmentUserTab(ParserUserTab.FAVOURITES); } else if (itemId == R.id.navigationWantToReadUser) { runFragmentUserTab(ParserUserTab.I_WANT_TO_READ); } else if (itemId == R.id.navigationTheListReadUser) { runFragmentUserTab(ParserUserTab.LIST_OF_READ); } else if (itemId == R.id.navigationNewChapterUser) { runFragmentUserTab(ParserUserTab.NOVELTIES_FOR_ME); } else if (itemId == R.id.navigationBookmarksUser) { runFragmentUserTab(ParserUserTab.BOOKMARKS); } return true; } @Override public void runFragment(String nameClassFragment) { getSupportFragmentManager().beginTransaction() .replace(R.id.fragment_main, Fragment.instantiate(this, nameClassFragment), nameClassFragment) .commit(); } @Override public void runFragmentUserTab(int tab) { getSupportFragmentManager().beginTransaction() .replace(R.id.fragment_main, UserTabFragment.newInstance(tab), UserTabFragment.class.getName()) .commit(); } 
  • 3
    did not try to use case? - Andrey Mihalev
  • one
    @AndreyMihalev Well, in short, the switch-case will not be exact. There still have to break for each condition to add. @ Ivan what is this warning? I have never seen a studio checking the length of methods - eugeneek
  • Why shorten the code? - Geri4
  • @eugeneek, it is disabled by default. You can enable in the setting: Setting - Editor - Inspections - the string "Overly long method". There you can specify the desired maximum method length. And output as a warning or as an error or so on. - Ivan
  • @ Geri4, The code in the method is ugly read. Too many duplicate words. - Ivan

1 answer 1

  1. Create a static Map<Integer, String> mFragments .
  2. Initialize somewhere at startup.
  3. Then the onNavigationItemSelected method will be as follows:

     @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { int itemId = item.getItemId(); if (itemId == R.id.nav_catalog) { runActivity(CatalogActivity.class); return false; } else { if(mFragments.containsKey(itemId) { runFragmentUserTab(mFragments.get(itemId)); } } return true; }