После извлечения стопки мои фрагменты не собираются мусором

После того, как вы вытолкнули задний стек, мои фрагменты не собираются мусором? Вызываются их методы onStop(), но не их методы onDestroyView() или onDestroy().

Как я могу убедиться, что их методы onDestory() вызываются?

Я совершил ошибку, создав «Активность Бога», и все мои фрагменты .replace() оказались в одном контейнере FrameLayout. Допустим, у меня есть четыре фрагмента, FragA, FragB, FragC и FragD, с обратным стеком, который выглядит примерно так:

FragA -> FragB -> FragC -> FragD

FragD is the only visible fragment. Then, I call .popBackstack()`

FragA -> FragB -> FragC =!= FragD

FragD был отсоединен, и теперь FragC виден пользователю. При попытке создать новый экземпляр FragD (из FragC) он создается, и в моей куче есть два экземпляра FragD. И onDestroyView() первого экземпляра FragD не вызывается.

Как я могу это исправить?

РЕДАКТИРОВАТЬ: вот пример того, как я сейчас заменяю фрагменты в своем пользовательском интерфейсе:

getSupportFragmentManager().beginTransaction()
            .replace(R.id.container, new SearchScreenFragment())
            .addToBackStack(null)
            .commit();

EDIT2: onDetach() тоже не вызывается.


person ZakTaccardi    schedule 12.04.2015    source источник


Ответы (1)


Я должен был использовать это: getChildFragmentManager():

Из https://stackoverflow.com/a/23500935/891242

person ZakTaccardi    schedule 12.04.2015