2017-03-06 71 views
2

我有兩個片段,片段A & B. 片段B包含在片段A的xml中。Android:如何調用包含在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> 

現在,我想從片段A.

如訪問方法片段B: 片段B:

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

片段A :

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

我該怎麼做到這一點?我應該使用界面嗎? 謝謝,

+0

從哪裏添加這些A和B片段..?來自基地活動的 –

+0

。但這並不重要。您也可以爲活動和片段提供解決方案。 Fragment包含在activity的xml中。現在我該如何訪問該活動的片段方法? –

+0

首先你移除'fragment'標籤並保留'FrameLayout'。 然後通過接口可以實現活動與片段或片段之間的通信以及片段。 –

回答

0

FragmentB fragmentB = (FragmentB)getActivity()。getFragmentManager()。findFragmentById(R.id.fragment_b); 012-fragmentB.releaseScannerCamera(this);

0
  1. 永遠不錯的方法是使用FrameLayout代替Fragment。 使用add方法片段管理器從活動中添加這些(A和B)片段。
  2. 在活動中創建接口方法,它將返回片段A和B的對象。因此,您可以隨時獲取片段的對象,然後相應地調用這些方法。
0

找到簡單答案。只需使用getChildFragmentManager()。無需創建任何活動接口,因爲這兩個片段都直接從xml連接。

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