Динамически добавленные фрагменты не удаляются при удалении контейнера - PullRequest
2 голосов
/ 28 января 2012

Я пытаюсь понять плохое поведение фрагментов: вызываются методы onCreateView и onActivityCreated, даже если фрагмент не «виден» в макете.

Если вы используете код:

TestFragment testFragment = new TestFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.fragmentDetail, testFragment, "test");
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();

заменив FrameLayout на id fragDetail на фрагмент, а затем поверните устройство, метод фрагментов по-прежнему вызывается, даже если контейнер больше не присутствует в макете портрета.Этого не происходит, если вы используете «статический» тег <fragment>.Если вы используете статический фрагмент, методы фрагментов вызываются именно тогда, когда фрагмент появляется.Можно ли добиться того же поведения без использования фрагмента тега?Мне нужен способ избежать рендеринга фрагмента, если его нет в макете.

Спасибо

Ответы [ 2 ]

2 голосов
/ 28 января 2012

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

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
     if (!fragment.isInLayout() && container == null) return null;
     ...
     }

Таким образом, вы можете избежать случая, когда фрагмент статически помещается в макет (в этом случае контейнер имеет значение null, но метод isInLayout () возвращает true. Кстати, мне до сих пор странно такое поведение.

0 голосов
/ 28 января 2012

AFAIK, фрагменты работают почти как Деятельности.У них одинаковый жизненный цикл.http://developer.android.com/reference/android/app/Fragment.html#Lifecycle Итак, если у вас нет ссылок на них, это не сделает их близкими.На них ссылается система и они живут сами по себе.Итак, вы должны как-то закончить их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...