Страницы

Поиск по вопросам

понедельник, 17 июня 2019 г.

Фрагменты наслаиваются друг на друга. [дубликат]

На данный вопрос уже ответили: Наложение фрагмента на фрагмент. За добавленным фрагментом виден предыдущий 2 ответа @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); layoutForFragment = (FrameLayout) findViewById(R.id.layout_for_fragment); fragmentTransaction = getFragmentManager().beginTransaction(); fragmentTransaction.add(R.id.layout_for_fragment,cardStation);
fragmentTransaction.commit(); }
В методе OnCreate я вставляю фрагмент во FrameLayout. Проблема в том, что при повороте экрана или при вылете с ошибкой фрагменты накладываются друг на друга на одно и то же место. Как решить проблему ?


Ответ

При повороте экрана активити пересоздаётся. При пересоздании активити система пытается восстановить предыдущее состояние. В предыдущем состоянии в активити добавлен фрагмент и система его восстанавливает, добавляя на экран. После этого выполняется onCreate, где вы добавляете ещё один фрагмент. Итого их у вас (число поворотов экрана)*1
Вам надо просто проверять восстановила ли активити к-л фрагмент, поискав его во FragmentManager по ID контейнера, и, если нет, то добавлять его:
cardStation = getSupportFragmentManager().findFragmentById(R.id.layout_for_fragment); if (cardStation == null) { cardStation = new CardStation(); getSupportFragmentManager(). beginTransaction().add(R.id.layout_for_fragment, cardStation) .commit(); }

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

Отправить комментарий