Ich habe einige hinzugefügt Fragment
in ein TableLayout
und ich möchte sie von meinem Container aus verwalten Activity
also 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
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
, Button
usw. 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 Fragments
und 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.
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
.
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.
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