web-dev-qa-db-fra.com

Comment accéder aux variables d'activité à partir d'un fragment Android

Dans l'activité, j'ai:

public class tabsmain extends Activity{
    public static Context appContext;

    public boolean lf_ch=false;

    public void onCreate(Bundle savedInstanceState){

Je voudrais accéder et éventuellement changer lf_ch d'un fragment à l'intérieur de tabsmain;

public class tabquests extends Fragment{ 
    public CheckBox lc;
@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)//onCreateView
    { 
lc.setChecked(//set it to lf_ch);

Cependant, je n'arrive pas à accéder à la valeur de lf_ch.

43
Syntax_Error

Essaye ça:

public View onCreateView(...){
  tabsmain xxx = (tabsmain)getActivity();
  lc.setChecked(xxx.lf_ch);
}
55
David M

Je sais que c’est une vieille question, mais voici une réponse facile qui permet de travailler sans passer par des cerceaux. Dans votre fragment, définissez une variable correspondant à l'activité dans laquelle le fragment se trouvera, puis connectez-la à l'activité avec onCreateView. Vous disposez alors d'une référence pouvant accéder à toute variable publique de l'activité principale. Je l'avais oublié quand je suis arrivé ici. C'est un peu difficile de faire l'inverse car vous devez trouver le fragment exact qui s'affiche. Cependant, avec cela, vous ne devriez pas avoir besoin de le faire dans l'autre sens, car vous pouvez facilement faire circuler les choses. J'espère que cela aidera tous ceux qui le rencontreront. 

public Quiz_Avtivity mainQuiz;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_quiz, container, false);

mainQuiz = (Quiz_Avtivity) getActivity();
//Below is where you get a variable from the main activity
mainQuiz.AnyPublicVariable = whatEver;
//also
whatEver = mainQuiz.AnyPublicVariable
21
Mark Dail

prenez la valeur d'activité dans le fragment.

((MainActivity) getActivity ()). MGoogleApiClient;

3
Sanjay Goswami

Un autre moyen d'obtenir des données d'activité consiste à accéder à l'intention de l'activité via:

getActivity.getIntent().getExtras();

et etc.

Cela peut être utile si vous démarrez une activité avec fragment en xml et que vous souhaitez contrôler le comportement onCreate () de fragment.

PS: de cause, vous devriez d'abord mettre quelque chose à l'intention 

2
Penzzz

Faire un récepteur de résultat générique

 enter image description here

Vous pouvez créer une interface pour cette tâche qui extrairait des données String de n'importe quelle activité vers votre fragment. Suivez ces étapes.

Créer une interface 

public interface MyResultReceiver{

      public String getResult();     

} 

Faites MyResultReceiver un membre de votre fragment 

public class tabquests extends Fragment{ 

    public CheckBox lc;
    public MyResultReceiver resultreceiver;

    @Override
    public void onAttach(Context context){
         super.onAttach(cotext);
         resultreceiver = (MyResultReceiver)context;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)//onCreateView
    { 

           YourFragment code code

           Boolean result = resultreceiver.getResult();
           lc.setChecked(result);

     }

}

Implémenter MyResultReceiver dans l'activité et remplacer la méthode

public class tabsmain extends Activity{

        public boolean lf_ch=false;

        // Activity code


        @Override
        public boolean getResult(){
             return lf_ch;
        }

 }

Avertissement:

Vous pourriez trouver cela un peu long pour ce cas. Mais le point positif de cette approche est que si vous souhaitez réutiliser ce code pour une autre activité. Vous n'aurez plus à écrire la même logique. Il suffit d’implémenter la MyResultReceiver dans votre activité, d’annuler la méthode et vous pourrez continuer. 

TIP: Pour pouvoir obtenir n'importe quel type de données, changez la définition de la méthode dans l'interface
depublic String getResult();àpublic Object getResult();

0
Rohit Singh

notez que votre fragment se charge avant l'activité. alors, vous devez appeler le 

tabsmain tabsm=(tabsmain) getActivity();

ligne dans la méthode onActivityCreated()

0
The Godfather

try tabsmain.appContext.lf_ch donnera la valeur u de cette variable.

Également dans cet ensemble d'activités appContext = this

0
Sumant

essaye ça

public boolean lf_ch=false;
public class tabsmain extends Activity{

    public static Context appContext;
    public void onCreate(Bundle savedInstanceState){
0
luchito

Accédez aux variables d'activité dans fragment pour utiliser un mot clé statique comme ceci:

MainActvity.Java

public static boolean lf_ch=false;

tabquestsFragment.Java

boolean if_value=MainActvity.lf_ch;

J'espère que ça t'aide

0
Android Geek

Essayez quelque chose comme ça:

    ViewPager mViewPager = (ViewPager) getActivity().findViewById(R.id.m_view_pager);
0
Ashish Gupta

Vous pouvez essayer la méthode suivante:

lc.setChecked(((yourpackagename)getActivity()).lf_ch);
0
Vigneshwaran.m