Wie bekomme ich Fragmente von View?

Lesezeit: 4 Minuten

Benutzer-Avatar
Goldarm

Ich habe einige hinzugefügt Fragment in ein TableLayout und ich möchte sie von meinem Container aus verwalten Activityalso habe ich das hier verwendet:

Fragment fragment = (Fragment) tableLayout.getChildAt(i);

aber getChildAt(int) gibt a zurück View und ein View konnte NICHT übertragen werden Fragment

  • Wie fügt man das Fragment hinzu? Durch XML Tags oder mit einem FragmentManager in Java?

    – Nachi

    31. Juli 2015 um 10:19 Uhr

  • Ich habe sie mit FragmentManager hinzugefügt

    – Golkarm

    31. Juli 2015 um 10:20 Uhr

Benutzer-Avatar
Sake

Ich verstehe nicht, warum die Leute Ihre Frage ablehnen. Fragments kann manchmal sehr verwirrend sein, besonders für Anfänger. Um Ihr Problem zu verstehen, müssen Sie lernen, was a ist Fragment und wie sie verwendet werden.

Zu Beginn, a View ist etwas, das auf dem Bildschirm existiert. Beispiele beinhalten: TextView, EditText, Buttonusw. Sie werden in „Layouts“ platziert, die in Xml oder Java/Kotlin geschrieben sind. Diese Layouts werden mit einem angezeigt Activity.

Nun, ein Fragment ist kein View. Es hat überhaupt keine Existenz auf dem Bildschirm. Stattdessen ist es eine Klasse, die einfach ein „Layout“ verwaltet – ähnlich wie ein Activity. Wenn Sie die von Ihren Fragmenten zurückgegebene Ansicht benötigen onCreateView()können Sie direkt verwenden findViewById() in deinem Activity.

Wenn Sie einen Verweis auf Ihr Fragment benötigen, gibt es zwei Möglichkeiten, dies zu tun:

1) Wenn Sie das Fragment programmgesteuert wie folgt hinzugefügt haben

getFragmentManager()
    .beginTransaction()
    .replace(R.id.fragment_container_viewgroup, myFragment, FRAGMENT_TAG)
    .commit();

Sie können Folgendes verwenden:

MyFragment myFragment = (MyFragment) getFragmentManager().findFragmentByTag(FRAGMENT_TAG);

2) Wenn Sie das Fragment in einem XML-Layout wie diesem hinzugefügt haben:

<fragment android:name="com.example.android.fragments.HeadlinesFragment"
    android:id="@+id/fragmentContainer"
    android:layout_weight="1"
    android:layout_width="0dp"
    android:layout_height="match_parent" />

Sie können dies verwenden:

getFragmentManager().findFragmentById(R.id.fragmentContainer);

Grundsätzlich hat jede Aktivität eine FragmentManager Klasse, die alle Aktiven beibehält Fragmentsund es gibt zwei Möglichkeiten, sie zu finden: Verwenden Sie ein eindeutiges TAG, das Sie übergeben, während Sie ein Fragment anzeigen, oder übergeben Sie die Containeransichts-ID, in der das Fragment hinzugefügt wurde.

  • Diese Antwort ist großartig. Ich habe das Fragment innerhalb des XML-Layouts hinzugefügt, daher hatte ich keine Ahnung, wie man sie richtig verwendet.

    – dave o grady

    3. März 2020 um 17:48 Uhr

  • Abhängig von Ihrem Kontext müssen Sie möglicherweise anrufen getChildFragmentManager() Anstatt von getFragmentManager()

    –Daniel F

    23. August 2020 um 9:55 Uhr

Benutzer-Avatar
yGedankensturm

Für Leute, die suchen, wie man tatsächlich einen Verweis auf das Fragment-Objekt aus einer Ansicht erhält, gibt es jetzt eine Methode in FragmentManager genannt findFragment(View) (Hinweis)

//in Java 
FragmentManager.findFragment(view)

//in Kotlin there is an extension function
view.findFragment()

Seien Sie vorsichtig – es wird eine IllegalStateException ausgelöst, wenn die Ansicht nicht über ein Fragment hinzugefügt wurde onCreateView.

  • Ich bin auf ein Problem mit ImageViews aus den Zeilen von RecyclerView gestoßen, die Bilder aus dem Netzwerk laden und nicht zu einem Fragment hinzugefügt werden, wenn ihre Ressource bereit ist. So überprüfen Sie, ob eine Ansicht zu einem Fragment hinzugefügt wurde, bevor Sie diese Erweiterungsmethode aufrufen, damit wir nicht versuchen müssen, die IllegalStateException von abzufangen findFragment()?

    – Android-Entwickler

    29. Januar um 21:43 Uhr

  • Wenn das Fragment die RecyclerView enthält, würde ich davon ausgehen, dass dies nicht die richtige Methode ist, um darauf zuzugreifen, da die Zellen niemals zum Fragment darin hinzugefügt werden onCreateView. Ich gehe davon aus, dass der einfachste Weg, Ihren Anwendungsfall zu handhaben, darin besteht, eine Schnittstelle an Ihre ViewHolders zu übergeben, die weiß, wie Sie auf alles zugreifen können, was Sie außerhalb von RecyclerView benötigen, und damit in einer bestimmten Zelle arbeiten.

    – und Gedankensturm

    21. Februar um 22:21 Uhr

  • Der Hinweis zur Vorsicht ist falsch: es ist nicht erforderlich, um die hinzuzufügen View über onCreateView damit das funktioniert. Wie auch immer, es ist erforderlich für ein View an die angehängt werden Fragment Baum ansehen. Sie können den nächsten Elternteil erfolgreich finden Fragment für alle angebracht View. Die Ausnahme wird ausgelöst, wenn a View ist losgelöst oder angehängt an ein Activity (also nicht in a Fragment). Das RecyclerView Das Problem kann durch Hinzufügen von a behoben werden OnAttachStateChangeListener zum itemView unserer ViewHolder oder durch Überschreiben onViewAttachedToWindow(ViewHolder) in unserer RecyclerView.Adapter.

    – Wes Alvaro

    13. Juli um 18:14 Uhr


So ein Fragment kann man nicht bekommen. Sie müssen ein Fragment mit einem Tag hinzufügen und es mit diesem Tag abrufen.

Um ein Fragment hinzuzufügen, gehen Sie wie folgt vor:

getFragmentManager().beginTransaction().add(R.id.container, fragment, "tagTofindFragment");

Fragment zu bekommen:

fragment = getFragmentManager().findFragmentByTag("tagTofindFragment");

Hier tagTofindFragment ist das Tag, das unter Ihren Fragmenten eindeutig sein sollte.

1186600cookie-checkWie bekomme ich Fragmente von View?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy