Есть ли способ сократить код?

228
03 марта 2018, 20:21

Android Studio выдает предупреждение (длина метода = 20), что нижеследующий метод onNavigationItemSelected (длина = 21) содержит длинный код. Есть ли способ сократить код?

@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();
  }
Answer 1
  1. Создайте статичную Map<Integer, String> mFragments.
  2. Инициализируйте где-то при старте.
  3. Тогда метод onNavigationItemSelected будет таким:

    @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;
    }
READ ALSO
Найти значение в строке Java

Найти значение в строке Java

Предположим что у нас есть текстовик, в котором текст вида: Number = 1 Vasya Number = 2 Valera Number = 3 Kolya

240
Ошибка Java:modifier &#39;static&#39; is only allowed in constant variable declarations

Ошибка Java:modifier 'static' is only allowed in constant variable declarations

Консоль с сайта codefights,подключенные библиотеки по умолчанию:

212
Деплой проекта Idea Ultimate на GlassFish

Деплой проекта Idea Ultimate на GlassFish

Для упрощения тестирования сделал примитивное клиент-серверное приложениеСервер на Java + web клиент на HTML+JS

185