Android OnPageChanged

maxl199

Mitglied
Hallo Community :D

Ich habe einen ViewPager mit 2 Fragments. Wie kann ich im Fragment 2 in der Methode OnPageChanged eine Methode von Fragment 1 aufrufen?

Und zwar habe ich in Fragment 1 eine Methode, die die Kamera startet. Und ich möchte nun, dass wenn ich von Fragment 2 auf Fragment 1 wechsle, diese Methode gestartet wird.

Danke schonmal im Vorraus :)
 

dzim

Top Contributor
Also ich bin mir nicht ganz sicher, ob ich deinen Ansatz verstanden habe, aber ich zeige mal, wie ich es machen würde:

Ich habe eine FragmentActivity die einen ActionBar.TabListener implementiert. Ich habe weiterhin natürlich den ViewPager auf dem Content Views (im Layout-XML der Activity definiert). Dann habe ich einen FragmentPagerAdapter der die einzelnen Seiten (in Form von - oh Wunder - Fragmenten) enthält. Diesen Adapter reiche ich an den ViewPager weiter. Ich denke soweit stimmen wir wahrscheinlich überein.

Hier nun eine Kombination aus meinem ViewPager.SimpleOnPageChangeListener (der obere Teil der Implementierung) und meinem Vorschlag, wie du deine Fragment-Methode aufrufen kannst (du solltest vielleicht noch eine "Shutdown"-Methode irgendwo einbauen...)
Java:
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
	@Override
	public void onPageSelected(int position) {
		// ich habe die Tabs bei genügend Platz in der ActionBar
		actionBar.setSelectedNavigationItem(position);
		// wenn ich nicht auf dem "Homescreen" bin, dann zeige das Symbol
		actionBar.setDisplayHomeAsUpEnabled(position > 0);

		// hier kannst du jetzt deine Methode aufrufen: Das wird häßllich!
		FragmentManager fm = getSupportFragmentManager();
		Fragment fragment = fm.findFragmentByTag(String.format(MainSectionsPagerAdapter.FRAGMENT_TAG, R.id.pager, mViewPager.getCurrentItem()));
		// MainSectionsPagerAdapter.FRAGMENT_TAG = "android:switcher:%d:%d"
		// irgendwann hab ich das mal im Netz gefunden, frag nicht wo - vergessen...
		if (fragment != null && fragment instanceof DasKameraFragment) {
			((DasKameraFragment) fragment).starteKamera();
		}
	}
});

Natürlich habe ich noch die ActionBar.TabListener-Implementierung:
Java:
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
	mViewPager.setCurrentItem(tab.getPosition());
}

@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {}

@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {}
Die war simpel, oder? ;-)

Hilft dir das?

Grüsse,
Daniel
 

maxl199

Mitglied
Was muss ich in dieser Zeile anstatt FRAGMENT_TAG schreiben?

Java:
Fragment fragment = fm.findFragmentByTag(String.format(MainSectionsPagerAdapter.FRAGMENT_TAG, R.id.pager, mViewPager.getCurrentItem()));

Gruß Daniel
 

dzim

Top Contributor
Das stand eine Zeile tiefer im Kommentar (versteckt):

Code:
// MainSectionsPagerAdapter.FRAGMENT_TAG = "android:switcher:%d:%d"

kannst also einfach statt dem MainSectionsPagerAdapter.FRAGMENT_TAG den formatierten String "android:switcher:%d:%d" schreiben.

Grüsse,
Daniel
 

dzim

Top Contributor
Büdde! Kannst du den Thread noch schließen (den Button 'Thema als "erledigt" markieren' unterhalb des Threads dazu drücken)? Thx!
 

Neue Themen


Oben