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.
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
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