Atualmente, tenho um fragmento em uma sobreposição. Isso é para entrar no serviço. No aplicativo de telefone, cada uma das etapas que desejo mostrar na sobreposição são suas próprias telas e atividades. Existem 3 partes do processo de login e cada uma tinha sua própria atividade que foi chamada com startActivityForResult ().
Agora quero fazer a mesma coisa usando fragmentos e uma sobreposição. A sobreposição mostrará um fragmento correspondente a cada atividade. O problema é que esses fragmentos estão hospedados em uma atividade na API Honeycomb. Posso fazer com que o primeiro fragmento funcione, mas depois preciso startActivityForResult (), o que não é possível. Existe algo na linha de startFragmentForResult () onde posso iniciar um novo fragmento e, quando terminar, ele retornará um resultado para o fragmento anterior?
fonte
onActivityResult
método do fragmento pai, se desejar.Se desejar, existem alguns métodos de comunicação entre fragmentos,
Você pode ligar de volta usando estes.
fonte
setTargetFragment()
.Podemos simplesmente compartilhar o mesmo ViewModel entre fragmentos
SharedViewModel
FirstFragment
SecondFragment
fonte
Meus 2 centavos.
Eu troco os fragmentos trocando um fragmento antigo por um novo usando ocultar e mostrar / adicionar (existente / novo). Portanto, esta resposta é para desenvolvedores que usam fragmentos como eu.
Então eu uso o
onHiddenChanged
método para saber se o fragmento antigo foi trocado pelo novo. Veja o código abaixo.Antes de deixar o novo fragmento, defino um resultado em um parâmetro global a ser consultado pelo fragmento antigo. Esta é uma solução muito ingênua.
fonte
getAndReset()
método?onResume()
chamado no primeiro fragmento quando o segundo é descartado?Recentemente, o Google acabou de adicionar uma nova capacidade
FragmentManager
que tornou oFragmentManager
torna capaz de atuar como um armazenamento central para resultados de fragmentos. Podemos passar os dados para frente e para trás facilmente entre os fragmentos.Fragmento inicial.
Um fragmento que queremos o resultado de volta.
O snippet é retirado dos documentos oficiais do Google. https://developer.android.com/training/basics/fragments/pass-data-between#kotlin
Com os dados desta resposta escrita, esse recurso ainda está no
alpha
estado. Você pode experimentar usando esta dependência.fonte
Em seu fragmento, você pode chamar getActivity (). Isso lhe dará acesso à atividade que criou o fragmento. A partir daí, você pode chamar seu método de personalização para definir os valores ou para passar os valores.
fonte
Existe uma biblioteca Android - FlowR que permite iniciar fragmentos para resultados.
Iniciando um fragmento para resultado.
Tratamento de resultados no fragmento de chamada.
Definindo o resultado no Fragment.
fonte
Uma solução usando interfaces (e Kotlin). A ideia central é definir uma interface de retorno de chamada, implementá-la em sua atividade e, em seguida, chamá-la de seu fragmento.
Primeiro, crie uma interface
ActionHandler
:Em seguida, chame de seu filho (neste caso, seu fragmento):
Finalmente, implemente isso em seu pai para receber o retorno de chamada (neste caso, sua atividade):
fonte
A maneira mais fácil de passar os dados de volta é setArgument (). Por exemplo, você tem fragment1 que chama fragment2 que chama fragment3, fragment1 -> framgnet2 -> fargement3
No fragmento 1
No fragmento 2 chamamos de fragmento 3, como de costume
Quando terminamos nossa tarefa no fragmento 3 agora chamamos assim:
Agora, no fragmento 2, podemos facilmente chamar argumentos
fonte
Outra coisa que você pode fazer, dependendo da sua arquitetura, é usar um ViewModel compartilhado entre os fragmentos. Portanto, no meu caso, FragmentA é um formulário e FragmentB é uma visualização de seleção de item onde o usuário pode pesquisar e selecionar um item, armazenando-o no ViewModel. Então, quando eu volto para FragmentA, a informação já está armazenada!
fonte