ViewPager soll einer Methode im aktuell dargestellten Fragment aufrufen

C

CoffeeCode

Ambitioniertes Mitglied
2
Aufgrund einer Design Entscheidung muss mein ViewPager Fragment mit den Fragmenten die er darstellt kommunizieren und methoden seiner Kinder aufrufen. Das Fragment mit dem Viewpager stellt Buttons da, die beim klicken eine Methode im Viewer Fragment ausführen soll.
Die Buttons waren vorher im Viewer Fragment jedoch sind beim Swipen die Buttons mit gefahren was ich nicht wollte. Daher sind die Buttons nun im Viewpager.

PV2rZ0c.jpg


Ich habe zwei Varianten versucht und beide ohne Erfolg. Kennt jemand eine Lösung wie die Kommunikation funktioniert oder vielleicht eine Design in dem dies so nicht nötig ist.

I. Hier ist page null. findFragmentbyTag findet mein Fragment nicht.
PHP:
        gridBtn = (Button) view.findViewById(R.id.BtnGrid);
        gridBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Fragment page = getFragmentManager().findFragmentByTag("android:switcher:" + R.id.pager + ":" + pager.getCurrentItem());
                if (pager.getCurrentItem() == 0 && page != null)
                    ((Viewer)page).showGrid();
            }
        });


II.
Hier bekomme ich das richtige Fragment, jedoch ist die Instanz die falsche.
PHP:
        gridBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                ((Viewer)adapter.getItem(pager.getCurrentItem())).showGrid();
                
            }
        });
 
Der ViewPager ist auch ein Fragment. Ändert das was? Ich schau mal obs damit geht.
 
Wenn der ViewPager ein Fragment ist und du das mit nem Interface löst, nimmst in der onAttach-Methode getParentFragment() anstatt der Aktivität.

Code:
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        mCallbacks = (Callbacks) getParentFragment();
    }
 
Meine MainActivity implentiert nun das Interface und die Methode wird beim klicken des Buttons auch ausgeführt. Jedoch weiß ich nicht wie ich mit findFragmentById() das Fragment aus dem ViewPager finde.

PHP:
public class MainActivity extends Activity implements FragmentViewPager.ButtonListener{

[...]

    //Communication FragmentViewPager/FragmentViewPagerShootAndView with Viewer
    @Override
    public void onExtraButton(String actionType) {
        Log.d(TAG, "Interface :" + actionType);   //wird ausgegeben beim Button klick

        Viewer viewer = (Viewer) getFragmentManager().findFragmentById(R.id.????);  // was schreibe ich hier rein?

        if(viewer != null){
            Log.d(TAG, "Found the active viewer Fragment");
        } else{
            Log.d(TAG, "Not found the viewer Fragment");
        }

    }

[...]
 
Da hast du etwas falsch verstanden...

Fragment hat Interface -> stellt einen Methodenaufruf zur Verfügung
Activity implementiert Interface -> funktionsaufruf

... sehe gerade du willst ja auch in die andere Richtung ...

bzw. ich glaube wo dein Problem liegt

-> wenn du verschachtelte Fragmente hast, dann kannst du nicht

getSupportFragmentManager().

nutzen sondern musst

getChildFragmentManager().

nehmen. (Weil du ja ein Fragment im Fragment nutzt)
 
Zuletzt bearbeitet:
Ich vermute ich muss das jeweilige Fragment über einen Tag suchen und nicht über die ID. Die ist ja bei allen instanziierten Fragmenten gleich. Der ViewPager hat, wenn ich mich nicht irre, bis zu drei Instanzen des Fragments.

Hier mein Aufbau:

MainActivity
|--->ViewPagerFragment
********|--->Viewer0
********|--->Viewer1
********|--->Viewer2
********| ....

Ui Element in ViewPagerFragment soll eine Methode in dem Viewer der aktuell angezeigt wird ausführen.

Der ursprüngliche Beitrag von 17:29 Uhr wurde um 17:56 Uhr ergänzt:

-.- glücklicher weise gibt es einen sehr schlanke Lösung.

android - Retrieve a Fragment from a ViewPager - Stack Overflow

Ich habe einfach den Adapter etwas erweitert und kann direkt im Fragment mit dem Button auf das child Fragment zugreifen.
 
Zuletzt bearbeitet:

Ähnliche Themen

Helmut1A
  • Helmut1A
Antworten
7
Aufrufe
1.127
Helmut1A
Helmut1A
D
  • Data2006
Antworten
14
Aufrufe
486
jogimuc
J
H
Antworten
2
Aufrufe
1.310
Hcman
H
Zurück
Oben Unten