Фрагмент добавляется каждый раз после перезапуска (Android)

#java #android #android-fragments #android-activity #android-lifecycle

#java #Android #android-фрагменты #android-активность #android-жизненный цикл

Вопрос:

Фрагменты, которые я добавляю в FragmentManager, удваиваются каждый раз, когда я перезапускаю действие, не уничтожая предыдущие фрагменты из FragmentManager. Вот мой код:

 private FragmentManager fm = getSupportFragmentManager();

@Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity);

fm.beginTransaction().add(R.id.main_container, fragment5, "5").hide(fragment5).commit();
fm.beginTransaction().add(R.id.main_container, fragment4, "4").hide(fragment4).commit();
fm.beginTransaction().add(R.id.main_container, fragment3, "3").hide(fragment3).commit();
fm.beginTransaction().add(R.id.main_container, fragment2, "2").hide(fragment2).commit();
fm.beginTransaction().add(R.id.main_container, fragment1, "1").commit();
}

  

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

 TextView someText = findViewById(R.id.text);
someText.setText("" fm.getFragments());
  

и установите его в TextView сразу после последней транзакции. При первой загрузке приложения текстовое представление пусто. Во второй раз, когда я использую действие «Применить изменения и перезапустить», TextView отображает список фрагментов массива только один раз.. но фрагменты удваиваются. В третий раз TextView дважды отображает список массива фрагментов, а фрагменты удваиваются.
Почему это происходит? Я делаю что-то не так? Надеюсь, вы ответите. С уважением.

Ответ №1:

попробуйте эти решения

  1. Инициализируйте диспетчер фрагментов перед этими строками в методе onCreate.
  2. попробуйте всплывающий фрагмент при обратном нажатии
  3. не добавляйте все фрагменты сразу. добавляйте фрагмент только тогда, когда его необходимо добавить.

Комментарии:

1. Но я не добавляю фрагменты в backstack. Так что при обратном нажатии ничего не работает. Я просто скрываю и показываю фрагменты.

2. fm = getSupportFragmentManager();

3. попытайтесь понять жизненный цикл activity, и вы его получите.

4. Извините, но результат такой же, как и раньше.

Ответ №2:

Попробуйте изменить его следующим образом

 private FragmentManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity);
fm = getSupportFragmentManager();


fm.beginTransaction().add(R.id.main_container, fragment5, "5").hide(fragment5).commit();
fm.beginTransaction().add(R.id.main_container, fragment4, "4").hide(fragment4).commit();
fm.beginTransaction().add(R.id.main_container, fragment3, "3").hide(fragment3).commit();
fm.beginTransaction().add(R.id.main_container, fragment2, "2").hide(fragment2).commit();
fm.beginTransaction().add(R.id.main_container, fragment1, "1").commit();
}
  

Комментарии:

1. Спасибо за ответ, но я пробовал это, и он работает так же. Я думаю, что это ошибка во фрагментах. Я сообщил об этом и жду их ответа.