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.
Essaye ça:
public View onCreateView(...){
tabsmain xxx = (tabsmain)getActivity();
lc.setChecked(xxx.lf_ch);
}
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
prenez la valeur d'activité dans le fragment.
((MainActivity) getActivity ()). MGoogleApiClient;
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
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;
}
}
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();
notez que votre fragment se charge avant l'activité. alors, vous devez appeler le
tabsmain tabsm=(tabsmain) getActivity();
ligne dans la méthode onActivityCreated()
try tabsmain.appContext.lf_ch
donnera la valeur u de cette variable.
Également dans cet ensemble d'activités appContext = this
essaye ça
public boolean lf_ch=false;
public class tabsmain extends Activity{
public static Context appContext;
public void onCreate(Bundle savedInstanceState){
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
Essayez quelque chose comme ça:
ViewPager mViewPager = (ViewPager) getActivity().findViewById(R.id.m_view_pager);
Vous pouvez essayer la méthode suivante:
lc.setChecked(((yourpackagename)getActivity()).lf_ch);