Changement viewpager fragment par un buttonClick
Je suis en train de changer la viewpager fragment en cliquant sur un bouton. J'ai 5 fragments, chaque fragment a son propre fichier xml (frag1.xml, frag2.xml et ainsi de suite). Chaque fragment a 5 boutons qui devraient aller vers les autres pages de l'viewpager. Mais le problème est de savoir comment puis-je vérifier dans le FragmentPageAdapter bouton qui a été cliqué et comment s'y rendre?
Je vais vous montrer le code que j'ai, alors il devrait être clair je pense. Pensez-y comme un écran d'accueil qui a des points à fond et je vous cliquez sur un certain point, vous allez à l'écran correspondant.
FragmentPagerAdapter
public class MyFragmentPagerAdapter extends FragmentPagerAdapter{
final int PAGE_COUNT = 6;
/** Constructor of the class */
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
/** This method will be invoked when a page is requested to create */
@Override
public Fragment getItem(int arg0) {
switch(arg0){
case 0:
return new Fragment1();
case 1:
return new Fragment2();
case 2:
return new Fragment3();
case 3:
return new Fragment4();
case 4:
return new Fragment5();
default:
return null;
}
}
/** Returns the number of pages */
@Override
public int getCount() {
return PAGE_COUNT;
}
}
Frag1.java
public class Frag1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.frag_one, container, false);
OnClickListener changeFrag = new OnClickListener() {
@Override
public void onClick(View v) {
/*When I click this button in my fragment, I'd like it to go to fragment 3 for example*/
}
};
ImageButton btnT = (ImageButton) v.findViewById(R.id.frag3);
btnT.setOnClickListener(changeFrag);
return v;
}
}
MainActivity
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);/** Getting a reference to the ViewPager defined the layout file */
ViewPager pager = (ViewPager) findViewById(R.id.pager);
/** Getting fragment manager */
FragmentManager fm = getSupportFragmentManager();
/** Instantiating FragmentPagerAdapter */
MyFragmentPagerAdapter pagerAdapter = new MyFragmentPagerAdapter(fm);
/** Setting the pagerAdapter to the pager object */
pager.setAdapter(pagerAdapter);
//pager.setPageTransformer(true, new ZoomOutPageTransformer());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
Est quelque chose comme cela possible? Quelqu'un peut-il m'aider dans la bonne direction s'il vous plaît?
OriginalL'auteur mXX | 2013-05-26
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas sûr exactement ce que vous avez dit sur le "Changement".
Si vous vous posez la question sur le changement d'affichage de la page d'index, vous pouvez essayer de
Ou, si vous demandez un changement de contenu, voici ce que j'ai fait
Espère que cela aide~
ViewPager.setCurrentItem(int pageIndex, boolean isSmoothScroll);
Vous disposez de 2 façon de le faire. 1) Mettez votre ViewPager objet statique publique, de sorte que vous pouvez accéder à l'un de vos Fragment. 2) le Séjour de votre ViewPager en tant que membre de votre FragmentActivity, envoyer une diffusion intention de votre Fragment de FragmentActivity, et d'accéder à vos ViewPager objet.
Ok, cela a fonctionné pour moi, merci!
stackoverflow.com/q/18097567/1503130 pouvez-vous m'aider avec ce
mXX, serait-il possible d'obtenir le code qui vous permettent de résoudre ce problème? J'ai le même problème mais ne peut pas trouver le moyen d'obtenir ViewPager de mon fragment. Merci beaucoup!
OriginalL'auteur RRTW
Je suis de poster une nouvelle réponse, car de ce que je peux voir - la vraie réponse est sur le commentaire de la accepté de répondre:
"Vous avez 2 façon de le faire. 1) Mettez votre ViewPager objet statique publique, de sorte que vous pouvez accéder à l'un de vos Fragment. 2) le Séjour de votre ViewPager en tant que membre de votre FragmentActivity, envoyer une diffusion intention de votre Fragment de FragmentActivity, et d'accéder à vos ViewPager objet. – RRTW 28 Mai '13 à 2:18 "
Ainsi, grâce à RRTW pour cette réponse, mais j'aimerais l'améliorer.
1) n'est PAS une option. Le but de fragments, c'est pour être réutilisable, de sorte qu'ils doivent être indépendants de l'Activité. En les reliant à l'activité est je pense une mauvaise pratique, même si - pour l'instant - vous ne sont pas ré-utiliser sur d'autres activités.
2) a l'air très bon, mais je pense qu'il a besoin de plus d'explication. Le but de getAcitivty().sendBroadcast() est d'envoyer un événement à toutes les applications de l'utilisateur du système. C'est franchement pas ce que vous voulez atteindre. Donc, la bonne réponse, de mon point de vue, est d'utiliser LoacalBroadcastManager, et vous pouvez avoir un coup d'oeil sur ce poste à comprendre comment l'utiliser.
Merci pour votre explication, #1 est une mauvaise conception de ce que je sais(uniquement pour un projet en cours d'exécution hors de dev. de temps). Et à propos de #2, comme vous l'avez dit, c'est LocalBroadcast(seulement dans votre propre APPLICATION), j'ai aussi l'utiliser dans mon projet d'APPLICATION. C'est mon erreur à l'appel de la Diffusion. Merci encore 🙂
OriginalL'auteur Sébastien BATEZAT