/ / 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>

Тепер я хочу отримати доступ до методу у фрагменті B з фрагмента А.

Наприклад: Фрагмент B:

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) фрагменти з діяльності, використовуючи метод add fragment fragment.
  2. Створіть в інтерфейсі методи інтерфейсу, які повертатимуть об'єкти фрагментів A і B. Таким чином, ви можете отримати об'єкт фрагмента, коли захочете, і викликати цей метод відповідно.

0 для відповіді № 3

Знайшов просту відповідь. Просто довелося використовувати getChildFragmentManager (). Немає необхідності створювати будь-який інтерфейс для активності, оскільки обидва фрагменти безпосередньо пов'язані з xml.

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