Communication between Fragments and the main activity that makes use of them can be done through Interfaces .
Each Fragment of your screen should declare an interface with one or more communication methods , which will be responsible for updating the data in the class which implement this interface (in this case, this class would be the Activity itself).
Let's take an example. First let's see the fragment that declares the communication interface:
public class ExemploFragment extends Fragment {
// declaração da interface de comunicação
public interface InterfaceComunicao {
// aqui, um ou mais métodos de comunicação
void setIdade(int idade); // por exemplo, este método retorna a idade inserida no fragment
}
/* variável que representa quem vai receber a atualização dos dados,
no caso a activity principal, que vai implementar a interface de comunicação */
private InterfaceComunicao listener;
@Override
public void onAttach(Activity activity) {
/*
onAttach faz parte do ciclo de vida do fragment, é executado
quando o fragment é associado à activity
*/
super.onAttach(activity);
if (activity instanceof InterfaceComunicao) {
listener = (InterfaceComunicao) activity;
} else {
throw new RuntimeException("Activity deve implementar ExemploFragment.InterfaceComunicao");
}
}
// um evento qualquer disparado pelo usuário, por exemplo um click de botão
public void onClickBotaoQualquer() {
/*
- chama o método de comunicação para atualizar o valor que o usuário informou na tela
- neste ponto, ler o valor de uma view, por exemplo TextView na tela
- para o exemplo configuramos direto o valor 15
*/
listener.setIdade(15);
}
}
The activity where fragment is associated must implement the communication interface declared in fragment , in case CommonCommunication , and their respective methods.
public class ExemploActivity extends Activity implements ExemploFragment.InterfaceComunicao {
.
.
.
// este é o método de comunicação declarado na interface
// quando o fragment chamar listener.setIdade(15); este é o método que será executado
@Override
public setIdade(int idade) {
/*
neste ponto, recupera o valor recebido do fragment e
implementa o código que desejar
*/
}
.
.
.
}
This approach guarantees the independence of fragment from the main activity , ie decoupling .
In this way you can use your fragment at any point in your application, just by using activity / em> of communication.
To learn more: link