Ich habe zwei Fragmente, Fragment A & B. Fragment B ist in der XML von Fragment A enthalten.
für zB: fragment_a.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black"
android:clickable="true"
>
<fragment android:name="com.test.FragmentB"
android:id="@+id/fragment_b"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
Nun möchte ich über Fragment A auf die Methode in Fragment B zugreifen.
Z.B : Fragment B:
public void releaseCamera(){
//todo: camera release here
}
Fragment A:
public void onButtonClick(){
//todo : call releaseCamera() here
//tried but didnot work
FragmentB fragmentB =
(FragmentB)getActivity().getSupportFragmentManager().findFragmentById(R.id.fragment_b);
fragmentB.releaseScannerCamera();
}
Wie kann ich das erreichen? Soll ich die Schnittstelle verwenden? Vielen Dank,
Antworten:
0 für die Antwort № 1FragmentB fragmentB = (FragmentB) getActivity (). GetFragmentManager (). FindFragmentById (R.id.fragment_b); fragmentB.releaseScannerCamera (this);
0 für die Antwort № 2
- Ein guter Ansatz ist es, FrameLayout anstelle von Fragment zu verwenden. Fügen Sie die Fragmente (A und B) aus der Aktivität hinzu, indem Sie die Methode Fragment-Manager hinzufügen verwenden.
- Erstellen Sie in der Aktivität Schnittstellenmethoden, die Objekte von Fragment A und B zurückgeben. So können Sie das Objekt von Fragment abrufen, wann immer Sie möchten, und diese Methoden entsprechend aufrufen.
0 für die Antwort № 3
Einfache Antwort gefunden. Musste nur getChildFragmentManager () verwenden. Es muss keine Schnittstelle für die Aktivität erstellt werden, da beide Fragmente direkt über XML verbunden sind.
FragmentB fragmentB =
(FragmentB)getChildFragmentManager().findFragmentById(R.id.fragment_b);
fragmentB.releaseScannerCamera();