У мене є два фрагменти, фрагмент 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 для відповіді № 1FragmentB фрагментB = (FragmentB) getActivity (). GetFragmentManager (). FindFragmentById (R.id.fragment_b); fragmentB.releaseScannerCamera (це);
0 для відповіді № 2
- Завжди хорошим підходом є використання FrameLayout замість Fragment. Додайте ті (A і B) фрагменти з діяльності, використовуючи метод add fragment fragment.
- Створіть в інтерфейсі методи інтерфейсу, які повертатимуть об'єкти фрагментів A і B. Таким чином, ви можете отримати об'єкт фрагмента, коли захочете, і викликати цей метод відповідно.
0 для відповіді № 3
Знайшов просту відповідь. Просто довелося використовувати getChildFragmentManager (). Немає необхідності створювати будь-який інтерфейс для активності, оскільки обидва фрагменти безпосередньо пов'язані з xml.
FragmentB fragmentB =
(FragmentB)getChildFragmentManager().findFragmentById(R.id.fragment_b);
fragmentB.releaseScannerCamera();