540 Stimmen

Wie erhalte ich das aktuell angezeigte Fragment?

Ich spiele mit Fragmenten in Android.

Ich weiß, dass ich ein Fragment mit Hilfe des folgenden Codes ändern kann:

FragmentManager fragMgr = getSupportFragmentManager();
FragmentTransaction fragTrans = fragMgr.beginTransaction();

MyFragment myFragment = new MyFragment(); //my custom fragment

fragTrans.replace(android.R.id.content, myFragment);
fragTrans.addToBackStack(null);
fragTrans.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
fragTrans.commit();

Meine Frage ist, wie kann ich in einer Java-Datei die aktuell angezeigte Fragment-Instanz erhalten?

0 Stimmen

1 Stimmen

Mögliches Duplikat von Abrufen des aktuellen Fragmentobjekts

22voto

tainy Punkte 931

Was ich verwende, um das aktuelle Anzeigefragment zu finden, ist im folgenden Code. Es ist einfach und es funktioniert für mich jetzt. Er läuft in der Aktivität, die die Fragmente enthält

    FragmentManager fragManager = this.getSupportFragmentManager();
    int count = this.getSupportFragmentManager().getBackStackEntryCount();
    Fragment frag = fragManager.getFragments().get(count>0?count-1:count);

15voto

Cory Roy Punkte 5219

Wenn Sie die AndroidX Navigation :

val currentFragment = findNavController(R.id.your_navhost)?.currentDestination

Weitere Informationen zu dieser Navigationskomponente finden Sie hier: https://developer.Android.com/guide/navigation/navigation-getting-started

13voto

Thordax Punkte 1633

Meine Methode basiert auf try / catch wie folgt:

MyFragment viewer = null;
    if(getFragmentManager().findFragmentByTag(MY_TAG_FRAGMENT) instanceOf MyFragment){
    viewer = (MyFragment) getFragmentManager().findFragmentByTag(MY_TAG_FRAGMENT);
}

Aber vielleicht gibt es einen besseren Weg ...

13voto

localhost Punkte 5520

En reaktiv Weise:

Observable.from(getSupportFragmentManager().getFragments())
    .filter(fragment -> fragment.isVisible())
    .subscribe(fragment1 -> {
        // Do something with it
    }, throwable1 -> {
        // 
    });

11voto

Nativ Punkte 3119

Nun, diese Frage erhielt viele Ansichten und Aufmerksamkeit, aber immer noch nicht enthalten die einfachste Lösung von meiner Seite - die Verwendung von getFragments().

            List fragments = getSupportFragmentManager().getFragments();
            mCurrentFragment = fragments.get(fragments.size() - 1);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X