/ / Android: come chiamare il metodo del frammento incluso in xml? - java, android, xml, frammenti di android

Android: come chiamare il metodo del frammento incluso in xml? - java, android, xml, android-frammenti

Ho due frammenti, frammento A e B. Il frammento B è incluso nel frammento A "s xml.

per esempio: 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>

Ora voglio accedere al metodo nel frammento B dal frammento A.

Per esempio : Frammento B:

public void releaseCamera(){
//todo: camera release here
}

Frammento A:

 public void onButtonClick(){
//todo : call releaseCamera() here
//tried but didnot work
FragmentB fragmentB =
(FragmentB)getActivity().getSupportFragmentManager().findFragmentById(R.id.fragment_b);
fragmentB.releaseScannerCamera();
}

Come posso raggiungerlo? Dovrei usare l'interfaccia? Grazie,

risposte:

0 per risposta № 1

FragmentB fragmentB = . (FragmentB) getActivity () getFragmentManager () findFragmentById (R.id.fragment_b).; fragmentB.releaseScannerCamera (questo);


0 per risposta № 2
  1. Un approccio sempre valido è utilizzare FrameLayout invece Frammento. Aggiungi quei frammenti (A e B) dall'attività usando il gestore frammenti metodo add.
  2. Creare metodi di interfaccia in attività che restituiranno oggetti del frammento A e B. In modo da poter ottenere l'oggetto del frammento ogni volta che lo si desidera e chiamare tali metodi di conseguenza.

0 per risposta № 3

Trovato una risposta semplice. Ho dovuto usare getChildFragmentManager (). Non è necessario creare alcuna interfaccia sull'attività poiché entrambi i frammenti sono collegati direttamente da XML.

FragmentB fragmentB =
(FragmentB)getChildFragmentManager().findFragmentById(R.id.fragment_b);
fragmentB.releaseScannerCamera();