Tentando chamar um método na minha atividade a partir de um fragmento. Eu quero que o fragmento forneça os dados do método e obtenha os dados quando o método retornar. Eu quero alcançar semelhante ao chamar um método estático, mas sem o uso de estática, pois cria problemas na atividade.
Novo em fragmentos, por isso preciso de uma explicação fácil e pedagógica!
Obrigado!
android
android-fragments
Joakim Ericsson
fonte
fonte
Você provavelmente deve tentar desacoplar o fragmento da atividade, caso queira usá-lo em outro lugar. Você pode fazer isso criando uma interface que sua atividade implementa.
Então você definiria uma interface como a seguinte:
Suponha, por exemplo, que você queira atribuir uma atividade à String e que ela retorne um número inteiro:
Isso pode ser definido no fragmento ou em um arquivo separado.
Então você teria sua atividade implementando a interface.
Em seu fragmento, você teria uma variável MyStringListener e configuraria o ouvinte no método fragment onAttach (Activity activity).
editar (17.12.2015):
onAttach(Activity activity) is deprecated, use onAttach(Context context) instead, it works as intended
A primeira resposta definitivamente funciona, mas associa seu fragmento atual à atividade do host. É uma boa prática manter o fragmento dissociado da atividade do host, caso você queira usá-lo em outra atividade.
fonte
Para desenvolvedores do Kotlin
Para desenvolvedores Java
fonte
Atualizar depois que eu entender mais como os fragmentos funcionam. Cada fragmento pertence a uma atividade pai. Então, basta usar:
De dentro do fragmento. É uma resposta melhor porque você evita lançamentos supérfluos. Se você não pode evitar os lançamentos com esta solução, use o abaixo.
============
o que você precisa fazer é lançar na atividade externa
a criação de uma nova instância confundirá o quadro do Android e não poderá reconhecê-lo. Veja também :
https://stackoverflow.com/a/12014834/1984636
https://stackoverflow.com/a/2042829/1984636
fonte
Embora eu goste completamente da resposta de Marco, acho justo ressaltar que você também pode usar uma estrutura baseada em publicação / assinatura para obter o mesmo resultado, por exemplo, se você for com o barramento de eventos, poderá fazer o seguinte
fragmento:
Atividade:
fonte
No kotlin você pode chamar o método de atividade do fragmento como abaixo:
fonte
Para acessar uma função declarada em sua Atividade através do seu fragmento, use uma interface, conforme mostrado na resposta por marco.
Para acessar uma função declarada em seu Fragmento por meio de sua atividade, você pode usá-la se não tiver uma tag ou um id
Este é o ViewpagerAdapterClass
Esta resposta é para noobs como eu. Tenha um bom dia.
fonte
Esta é da classe Fragment ...
Este código da classe de atividade ...
fonte
Eu tentei com todos os métodos mostrados neste segmento e nenhum funcionou para mim, tente este. Funcionou para mim.
fonte
Eu tenho procurado a melhor maneira de fazer isso, pois nem todos os métodos que queremos chamar estão localizados no fragmento com o mesmo pai da atividade.
No seu fragmento
Na sua atividade
fonte
((YourActivityName)getActivity()).functionName();
Exemplo:
((SessionActivity)getActivity()).changeFragment();
Nota: o nome da classe deve estar em público
fonte
Onde
your_activity
é o nome da sua atividade emethod_name()
o nome do método que você deseja chamar.fonte
Para Kotlin, experimente
fonte