Как переключить домашний фрагмент между двумя различными фрагментами в зависимости от предпочтений пользователя

Я нахожусь в процессе добавления функции приложения моей команды, которая позволит пользователю выбирать между двумя различными домашними экранами. Обратите внимание, что оба эти экрана имеют разные ощущения.

Моя текущая установка для этого состоит в том, чтобы иметь 2 отдельных фрагмента Home1Fragment и Home2Fragment, которые оба расширяют абстрактный класс, называемый HomeFragment. Пользователь будет использовать Home1Fragment по умолчанию, пока он не изменит предпочтения на странице настроек.

Я реализовал оба этих фрагмента, и оба они работают должным образом, если они работают как домашний экран.

Моя проблема заключается в том, что я пытаюсь переключить их с одного фрагмента на другой. Я пытался это через

@Override
public void onBackPressed() {
   FragmentManager fragmentManager = getFragmentManager();

   if(fragmentManager.getBackStackEntryCount() > 1) {
      fragmentManager.popBackStackImmediate();

      int option = getSharedPreferences('**hidden**', MODE_PRIVATE).get('home_screen_option', 0);
      Fragment fragment = fragmentManager.findFragmentById(R.id.content);
      if(fragment != null && fragment instanceof HomeFragment) {
          if(f instanceof Home1Fragment && option == HOME_2) {
             f = new Home2Fragment();
          } else if (f instanceof Home2Fragment && option == HOME_1) {
             f = new Home1Fragment();
          }
      }
   } else {
      finish();
   }
}

В приведенном выше коде могут быть опечатки, потому что я написал их на лету без реального кода передо мной.

1 ответ

Вы фактически не устанавливаете новый фрагмент в своем коде.

Но я бы выбрал другой подход, который основан на сохраненном состоянии (например, настройка в общих настройках) и обрабатывается самим домашним экраном (вместо манипулирования задним стеком, против которого я выступаю).

Опция 1.

Пожалуйста, подумайте, если ваш домашний экран может быть отдельным Activity, Таким образом, вы можете просто загрузить правильный фрагмент, когда Activity начинается на основе значения, хранящегося в SharedPreferences,

Вариант 2

Практически то же самое, просто используя вложенный фрагмент. Пусть ваш домашний экран будет Fragment и добавьте контейнер для дочерних фрагментов в свой макет. Затем просто используйте дочерний менеджер фрагментов, чтобы загрузить правильное представление соответственно.

Другие вопросы по тегам