Estou usando o pacote de compatibilidade para usar Fragments com Android 2.2. Ao usar fragmentos e adicionar transições entre eles na pilha de backstack, gostaria de obter o mesmo comportamento de onResume de uma atividade, ou seja, sempre que um fragmento é trazido para "primeiro plano" (visível para o usuário) após sair do backstack, gostaria que algum tipo de retorno de chamada fosse ativado dentro do fragmento (para realizar certas mudanças em um recurso de IU compartilhado, por exemplo).
Percebi que não há retorno de chamada embutido na estrutura do fragmento. existe uma boa prática para conseguir isso?
onCreateView
que será chamado para o fragmento após um estalo.Respostas:
Por falta de uma solução melhor, coloquei isso funcionando para mim: suponha que eu tenha 1 atividade (MyActivity) e alguns fragmentos que se substituem (apenas um é visível por vez).
Em MyActivity, adicione este ouvinte:
(Como você pode ver, estou usando o pacote de compatibilidade).
Implementação getListener:
MyFragment.onFragmentResume()
será chamado depois que "Voltar" for pressionado. algumas advertências embora:FragmentTransaction.addToBackStack()
)fonte
Mudei um pouco a solução sugerida. Funciona melhor para mim assim:
fonte
getFragments()
em SupportFragmentManager ... -1: - /Depois de um,
popStackBack()
você pode usar o seguinte retorno de chamada:onHiddenChanged(boolean hidden)
dentro do seu fragmentofonte
A seção a seguir em Desenvolvedores Android descreve um mecanismo de comunicação Criando callbacks de eventos para a atividade . Para citar uma linha dele:
Editar: o fragmento possui um
onStart(...)
que é invocado quando o fragmento está visível para o usuário. Da mesma forma,onResume(...)
quando visível e em execução ativa. Eles estão vinculados às suas contrapartes de atividade. Resumindo: useonResume()
fonte
Na minha atividade onCreate ()
Use este método para capturar Fragment específico e chamar onResume ()
fonte
Um pouco melhorado e embrulhado em uma solução de gerenciamento.
Coisas a ter em mente. FragmentManager não é um singleton, ele gerencia apenas Fragments dentro de Activity, então em cada atividade será novo. Além disso, esta solução até agora não leva o ViewPager em consideração que chama o método setUserVisibleHint () ajudando a controlar a visibilidade dos Fragments.
Sinta-se à vontade para usar as classes a seguir ao lidar com esse problema (usa injeção Dagger2). Chamada em atividade:
FragmentBackstackStateManager.java:
FragmentBackstackChangeListenerImpl.java:
BackstackCallback.java:
fonte
Se um fragmento for colocado na pilha de retorno, o Android simplesmente destrói sua visualização. A própria instância do fragmento não é eliminada. Uma maneira simples de começar é ouvir o evento onViewCreated e colocar a lógica "onResume ()" lá.
fonte
Esta é a resposta correta que você pode chamar onResume (), desde que o fragmento esteja anexado à atividade. Alternativamente, você pode usar onAttach e onDetach
fonte
onResume () para o fragmento funciona bem ...
fonte
e a extensão final do seu Frament from RootFragment para ver o efeito
fonte
Minha solução alternativa é obter o título atual da barra de ações no Fragment antes de defini-lo com o novo título. Dessa forma, uma vez que o Fragment é exibido, posso voltar a esse título.
fonte
Usei enum
FragmentTags
para definir todas as minhas classes de fragmento.passar
FragmentTags.TAG_FOR_FRAGMENT_A.name()
como tag de fragmento.e agora em
fonte