web-dev-qa-db-fra.com

Partage de données entre fragments et activité sous Android

J'ai déjà posé une question similaire auparavant, je n'ai pas eu de réponse et il semble que beaucoup d'autres personnes recherchent une réponse. Donc, je poste cette question pour obtenir, espérons-le, une réponse claire dont tout le monde peut bénéficier.

J'ai une activité avec 2 fragments. Je souhaite que fragment2 définisse une variable booléenne dans Activity lorsqu'une case à cocher est cochée afin que fragment1 puisse savoir si cette case a été cochée.

Ceci est mon code:

Activité:

public class modestab extends Activity{
    public static Context appContext;

    public boolean lf=false;

    public void onCreate(Bundle savedInstanceState){
        appContext=this;
super.onCreate(savedInstanceState);
ActionBar tabbar= getActionBar();
        tabbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        ActionBar.Tab ModesTab =tabbar.newTab().setText("Modes");
        ActionBar.Tab CatTab =tabbar.newTab().setText("Categories");

        Fragment ModesFragment =new modes();
        Fragment CatFragment =new cats();

        ModesTab.setTabListener(new MyTabsListener(ModesFragment));
        CattTab.setTabListener(new MyTabsListener(CatFragment));

        tabbar.addTab(ModesTab);
        tabbar.addTab(CatTab);


    }

Fragment 1: (Où je veux lire le lol booléen défini dans l’activité ci-dessus:

@TargetApi(11)
public class tabmodes extends Fragment{
@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
View V=inflater.inflate(R.layout.tab_modes, container, false);
button1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                if(lf==false) //lf here is the lf in Activity which I want to get

Fragment 2: Où je veux placer lf dans l'activité

.....
lifecheck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
              @Override
                public void onCheckedChanged(CompoundButton buttonView,
                        boolean isChecked) {
                  if(lifecheck.isChecked())
                      getActivity().lf=true;//Where I want to set the lf flag in Activity
                  ;
              }
          });

Le code ne compile pas et je ne sais pas comment définir lf dans l'activité ni comment le lire. Quelqu'un m'a suggéré d'obtenir getActivity (), mais je ne suis pas en mesure de voir la variable.

J'ai essayé de créer une fonction setlf (boolean jk) mais je ne parviens pas à la voir ...

Toute aide est la bienvenue :)

31
Syntax_Error

Plusieurs façons :

1) Activité -> Fragment

2) Activité -> Fragment

  • Dans votre fragment: crée une méthode publique

  • Dans votre activité: appelez une méthode publique fragment active:

    getSupportFragmentManager () . findFragmentById (R.id.votre_fragment) .publicMethod (args)

3) Fragment -> Activité

  • Dans votre fragment: crée une interface avec les méthodes getter et setter ( méthodes de rappel )
  • Dans votre activité: implémenter l'interface

4) Fragment -> Activité

  • Dans votre activité: Créez des méthodes de lecture et de définition publiques ou d'autres méthodes
  • Dans votre Fragment} _: appelé getter, setter ou autre méthode d'activité publique à l'aide de:

    getActivity () . getSomething (), getActivity () . setSomething (args) ou getActivity () . une méthode (args)

110
Alain Beauvois

Vous pouvez transmettre des données entre fragments de deux manières, 

Tout d’abord, vous pouvez le faire en utilisant setArguments (...) et getArguments (....)

Deuxièmement, vous pouvez le faire en utilisant Rappeler

2
RajeshVijayakumar

Vous pouvez aussi utiliser EventBus. C'est vraiment simple. https://github.com/greenrobot/EventBus

N'utilisez certainement pas de méthodes statiques comme mon ancienne réponse :)

1
Mete