Имам два фрагмента, фрагмент 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 за отговор № 1FragmentB фрагментB = . (FragmentB) getActivity () getFragmentManager () findFragmentById (R.id.fragment_b). fragmentB.releaseScannerCamera (това);
0 за отговор № 2
- Винаги добър подход е да използвате FrameLayout вместо Fragment. Добавете тези (A и B) фрагмент от дейност с помощта на метод за добавяне на мениджър на фрагменти на метод.
- Създайте интерфейсни методи в активност, които ще връщат обекти от фрагмент А и Б. Така че можете да получите обекта на фрагмент, когато пожелаете, и да извикате тези методи съответно.
0 за отговор № 3
Намери прост отговор. Просто трябваше да използвам getChildFragmentManager (). Няма нужда да създавате никакъв интерфейс за активност, тъй като и двата фрагмента са директно свързани от xml.
FragmentB fragmentB =
(FragmentB)getChildFragmentManager().findFragmentById(R.id.fragment_b);
fragmentB.releaseScannerCamera();