Como posso transmitir dados entre um fragmento e sua atividade de contêiner? Existe algo semelhante à passagem de dados entre as atividades por meio de intenções?
Eu li isso, mas não ajudou muito:
http://developer.android.com/guide/topics/fundamentals/fragments.html#CommunicatingWithActivity
Respostas:
No seu fragmento você pode ligar
getActivity()
.Isso lhe dará acesso à atividade que criou o fragmento. A partir daí, obviamente, você pode chamar qualquer tipo de método de acesso que esteja na atividade.
por exemplo, para um método chamado
getResult()
em sua atividade:fonte
Tente usar interfaces.
Qualquer fragmento que deve transmitir dados de volta à sua atividade de contenção deve declarar uma interface para manipular e transmitir os dados. Em seguida, verifique se a atividade que contém implementa essas interfaces. Por exemplo:
JAVA
No seu fragmento, declare a interface ...
Em seguida, conecte a implementação da interface da classe que contém ao fragmento no método onAttach, da seguinte maneira:
No seu fragmento, quando você precisar manipular a passagem de dados, basta chamá-lo no objeto dataPasser:
Finalmente, em sua atividade de contenção que implementa
OnDataPass
...KOTLIN
Etapa 1. Criar interface
Etapa 2. Em seguida, conecte a implementação da classe que contém a interface ao fragmento no método onAttach (YourFragment), da seguinte maneira:
Etapa 3. No seu fragmento, quando você precisar manipular a passagem de dados, basta chamá-lo no objeto dataPasser:
Etapa 4. Finalmente, em sua atividade implementa OnDataPass
fonte
ActionBar.TabListener
e tive que adicionar uma interface adicional.Abordagem mais fácil, mas não recomendada
Você pode acessar os dados da atividade do fragmento:
Atividade:
Fragmento:
fonte
MyActivity
fonte
Passando dados entre um fragmento e sua atividade de contêiner
Atividade:
Fragmento:
Lendo o valor no fragmento
fonte
Eu não sei se essa é a melhor maneira ou não Bu, eu tenho pesquisado no google por um bom tempo, descobrindo como posso passar um Bundle de um fragmento para sua atividade de contêiner, mas tudo que eu encontrei foi enviar dados da atividade para o fragmento (o que foi um pouco confuso para mim porque sou novato).
depois, tentei algo próprio que funcionou exatamente para mim como eu queria. então eu vou postar aqui caso alguém como eu procure a mesma coisa.
// Passando dados do fragmento.
// Obtendo dados do pacote configurável a partir da atividade do contêiner.
fonte
Interface é uma das melhores soluções:
Interface de cola:
Minha atividade:
MyFragment:
fonte
Eu usei um AppCompatActivity que implementa ouvintes de data. Fragmentos vieram como uma necessidade, pois eu precisava codificar um seletor de período. E também precisava que o contêiner recebesse as datas selecionadas para devolvê-las à atividade pai.
Para a atividade do contêiner, esta é a declaração de classe:
E as interfaces para os retornos de chamada:
Os retornos de chamada são cadeias porque datas são parâmetros em uma seleção de consulta.
O código para os fragmentos (com base no fragmento de data inicial):
}
Para compor o contêiner + fragmentos, usei um ViewPager (AppCompat) com uma classe personalizada que estende o FragmentPagerAdapter. Sem diálogos.
fonte
Simplesmente você pode usar o EventBus , é fácil e funciona muito bem
EventBus em 3 etapas
Defina eventos:
public static class MessageEvent { /* Additional fields if needed */ }
Preparar assinantes: declare e anote seu método de inscrição, opcionalmente, especifique um modo de encadeamento:
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {/* Do something */};
Registre e cancele o registro de seu assinante. Por exemplo, no Android, atividades e fragmentos geralmente devem ser registrados de acordo com seu ciclo de vida:
Publicar eventos:
EventBus.getDefault().post(new MessageEvent());
fonte
Eu sei que isso pode ser tarde. Mas eu também estava sempre perdida nessa questão. Estou compartilhando este link ... porque esta é possivelmente a melhor explicação que eu já encontrei na web para isso. Isso resolve Fragmento para Atividade e Fragmento para Fragmento !
Resolvido e explicado muito bem
fonte
Isso está funcionando para mim ..
em Atividade, adicione este método
e no fragmento adicione esta linha
fonte
fonte
Outra maneira simples de obter dados, passados de outra atividade, em um fragmento de uma atividade de contêiner: por exemplo:
Em sua Activity_A, você cria uma intenção como se estivesse enviando dados (String aqui) para outra atividade:
no seu fragmento, contido no seu Activity_B:
fonte
getBaseContext()
me dá o seguinte erro:The method getBaseContext() is undefined for the type new View.OnClickListener(){}