Removendo programaticamente um ViewPager, quando são (ou como posso garantir) contidos fragmentos são destruídos?

Tendo pesquisado antecipadamente sobre esse problema, posso encontrar muitas discussões sobre como adicionar e remover dinamicamenteFragments de umViewPager. O que eu estou realmente preocupado aqui, no entanto, é como eu posso remover programaticamente um todoViewPager 'limpa' da sua contendoViewGroupquando issoViewPager foi usado para exibirFragments através de umFragmentPagerAdaptere garantir que osFragments são destruídos corretamente.

Para expandir um pouco mais a questão, eu tenho um layout de dois painéis de paisagem, onde uma seleção é feita a partir de uma lista dentro de umFragment no lado esquerdo, e o conteúdo escolhido é colocado à direita dentro de umFrameLayout. O principal é que o conteúdo pode ou não ser paginado. Portanto, o conteúdo deve ser exibido em umViewPager formato ou, se não for paginado, será representado por um únicoFragment diretamente.

Para mostrar um únicoFragment, Eu simplesmente faço umaFragmentTransaction como faria normalmente para colocar oFragment noFrameLayout recipiente. Se, por outro lado, é paginado conteúdo para ser mostrado, em vez disso eu criar umViewPager e adicioná-lo como um filho doFrameLayout.

Quando preciso alterar o conteúdo, se o conteúdo anterior foi autônomoFragment então eu posso simplesmente removê-lo viaFragmentTransaction .remove(). Quando faço isso, oFragment atravessa oonPause() ...onDestroy() ciclo como esperado. Se o conteúdo anterior era umViewPager então eu removê-lo doFrameLayout usando.removeAllViews(). Aqui chego ao problema: não vejo nenhum dosonPause() ...onDestroy() métodos sendo chamados em qualquer um dosFragments que foram realizadas dentro desseViewPager através doFragmentPagerAdapter.

Do ponto de vista do usuário, o aplicativo funciona bem. Depois de várias rodadas deViewPager sendo removido, vejo o GC recuperando a memória. No entanto, eu não gosto do fato de que aquelesFragmentOs métodos de fim de vida não são chamados, já que não posso fazer nenhuma limpeza dentro deles, e isso não parece "certo".

Existe um método que eu posso ligar para remover oViewPager'sFragments quando oViewPager é separado de seu pai, talvez? Em outras palavras, quando eu sei que oViewGroup não está mais em uso, eu fariaFragmentTransactions em algum lugar (talvez noFragmentPagerAdapter) para remover osFragments.

Alternativamente, eu percebo que eu poderia apenas manter oViewPager à direita permanentemente, e trocar dinamicamente oFragmentestá dentro dele. É claro que simplesmente não importaria que em certos momentos isso pudesse conter apenas uma página. Se esta seria uma maneira melhor de ir, então eu devo refatorar meu código para fazer isso, mas gostaria de receber opiniões.

questionAnswers(1)

yourAnswerToTheQuestion