web-dev-qa-db-fra.com

Accéder aux variables d'activité dans le fragment

Si j'ai une activité A qui étend une activité de base BA, je peux accéder en toute sécurité à toute variable de l'activité BA de l'activité A. Ce que j'utilise contient maintenant une activité A qui comprend un fragment F. accéder à toutes les variables de A de la même manière, comme je l’ai fait plus haut. Sinon, existe-t-il un moyen sûr de le faire autrement que de le rendre accessible par des méthodes publiques.

Ou y a-t-il un moyen de copier les variables de l'activité de base dans un fragment de base afin qu'il soit disponible dans toutes les activités et tous les fragments.

5
Jude Fernandes

Un bon moyen de l'implémenter est d'utiliser une interface, comme le suggère la documentation officielle.

Pour permettre à un fragment de communiquer jusqu'à son activité, vous pouvez définir une interface dans la classe Fragment et l'implémenter dans l'activité.

Donc, dans votre fragment, vous définissez une interface comme celle-ci:

public interface MyListener {
     public void onAction();
}

et définir (toujours dans le fragment) un champ de type MyListener

MyListener mCallback;

Ensuite, vous pouvez définir cet écouteur en utilisant la méthode onAttach(Activity):

mCallback = (MyListener) activity;

Maintenant, chaque fois que vous voulez appeler depuis votre fragment une méthode de l'activité, vous pouvez utiliser le rappel:

mCallback.onAction();

Bien entendu, votre activité doit implémenter l'interface, sinon vous obtiendrez une exception lors du transfert de votre activité vers MyListener.

Alors, fais juste:

public class MyActivity extends Activity implements MyFragment.MyListener {
    @Override
    public void onAction() {
        // some stuff
    }
}

Pour plus de détails, consultez la documentation sur la communication entre fragments

3
GVillani82

Si VARIABLE_NAME est une variable de votre activité ACTIVITY_NAME et que vous pouvez y accéder de l'extérieur de l'activité ACTIVITY_NAME

Alors utilisez ce code:

((ACTIVITY_NAME)this.getActivity()).VARIABLE_NAME //this refers to your fragment
1
Atef Hares