Ändern viewpager fragment durch ein buttonClick
Ich versuche, ändern Sie den viewpager fragment durch klicken auf eine Schaltfläche. Ich habe 5 Fragmente jedes fragment hat seine eigene xml-Datei (frag1.xml, frag2.xml und so weiter). Jedes fragment hat es 5 buttons, dass sollte gehen Sie zu anderen Seiten der viewpager. Aber das problem ist, wie kann ich prüfen, ob in der FragmentPageAdapter die Schaltfläche geklickt wird, und wie bekomme ich es?
Ich zeige den code, den ich habe, dann sollte es klar sein, denke ich. Denken Sie daran, wie ein homescreen, der hat Punkte am Boden und ich Sie auf einen bestimmten Punkt, werden Sie gehen zu dem entsprechenden Bild.
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;
}
}
Ist so etwas möglich? Kann mir jemand helfen in die richtige Richtung bitte?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin mir nicht sicher, was genau Sie sagte zu "Ändern".
Wenn Sie Fragen über die änderung der Seite anzeigen index, können Sie versuchen,
Oder, wenn Sie Fragen über die Veränderung von Inhalt, hier ist was ich getan habe
Hoffe es hilft~
ViewPager.setCurrentItem(int pageIndex, boolean isSmoothScroll);
Ich werde Entsendung eine neue Antwort, weil von dem, was ich sehen kann - die Reale Antwort auf den Kommentar von der akzeptierten Antwort:
"Du hast 2 Wege, das zu tun. 1) Legen Sie Ihren ViewPager-Objekt als öffentliche statische, so dass ein Zugriff in alle Ihre Fragment. 2) Bleiben Sie Ihrem ViewPager als Mitglied Ihrer FragmentActivity, senden Sie ein broadcast-intent von Ihrem Fragment zu FragmentActivity, und Zugriff auf Ihre ViewPager-Objekt. – RRTW 28 Mai '13 bei 2:18 "
Also Dank RRTW für die Antwort, aber ich möchte es verbessern.
1) ist KEINE option. Der Zweck der Fragmente ist wiederverwendbar sein, so müssen Sie unabhängig von der Aktivität. Verknüpfen Sie die Aktivität ist denke ich eine schlechte Praxis, wenn auch für jetzt - Sie sind nicht re-verwenden Sie es auf eine andere Aktivität.
2) Klingt sehr gut, aber ich denke, es braucht mehr Erklärung. Der Zweck der getAcitivty().sendBroadcast() wird zum senden ein Ereignis, um alle Anwendung von dem system des Benutzers. Es ist definitv nicht das, was Sie erreichen wollen. So die gute Antwort, aus meiner Sicht, ist die Verwendung LoacalBroadcastManager, und Sie können einen Blick auf post zu verstehen, wie es zu benutzen.
In main rufen Sie einfach machen, Ihre Viewpager öffentlichkeit, so sein zugänglich von anderen java-Dateien( ex. aus frag1.java)
MainActivity.Java:
public static ViewPager pager;
Nun, in der Onclick () - Funktion in frag1.java rufen Sie Ihren
mViewPager
und das Produkt(fragment), zu welchem fragment die Sie laden möchten. Ex. Wenn Sie möchten, laden Sie das nächste fragment, dann setzen Sie ihn auf " 2.frag1.java