#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:
попробуйте эти решения
- Инициализируйте диспетчер фрагментов перед этими строками в методе onCreate.
- попробуйте всплывающий фрагмент при обратном нажатии
- не добавляйте все фрагменты сразу. добавляйте фрагмент только тогда, когда его необходимо добавить.
Комментарии:
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. Спасибо за ответ, но я пробовал это, и он работает так же. Я думаю, что это ошибка во фрагментах. Я сообщил об этом и жду их ответа.