/ / Android: Как да извика метод на фрагмент, включен в xml? - java, android, xml, android-fragments

Android: Как да се обадите метод на фрагмент, включени в XML? - java, android, xml, android-фрагменти

Имам два фрагмента, фрагмент A&B. Фрагмент В е включен във фрагмент A "xml.

например: 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>

Сега искам да достъпа до метод във фрагмент Б от фрагмент А.

Например: Фрагмент Б:

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

Фрагмент А:

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

Как мога да постигна това? Трябва ли да използвам интерфейс? Благодаря,

Отговори:

0 за отговор № 1

FragmentB фрагментB = . (FragmentB) getActivity () getFragmentManager () findFragmentById (R.id.fragment_b). fragmentB.releaseScannerCamera (това);


0 за отговор № 2
  1. Винаги добър подход е да използвате FrameLayout вместо Fragment. Добавете тези (A и B) фрагмент от дейност с помощта на метод за добавяне на мениджър на фрагменти на метод.
  2. Създайте интерфейсни методи в активност, които ще връщат обекти от фрагмент А и Б. Така че можете да получите обекта на фрагмент, когато пожелаете, и да извикате тези методи съответно.

0 за отговор № 3

Намери прост отговор. Просто трябваше да използвам getChildFragmentManager (). Няма нужда да създавате никакъв интерфейс за активност, тъй като и двата фрагмента са директно свързани от xml.

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