Catch data from 3 fragments

1

Good afternoon, I'm developing an android application and I have an activity with 3 fragments (tabs), where each one contains a part of a form and the last one I have a save button. My difficulty is in how to get the data from the 3 fragments the moment I click the save button. I read in some places to create a "transport" class to get these data but I could not understand it very well.

    
asked by anonymous 17.05.2016 / 20:07

1 answer

0

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

    
19.05.2016 / 13:44