達尼,
當片段處理,你最好的傳播手段片段之間是通過活動。例如。讓我們考慮具有碎片B,C和D的活動A. 將新片段設置爲通過FragmentManager放置並加載後,您可以調用其上的getActivity()以獲取對其的引用。一個好主意是實現一個接口,使您可以使用它在實現它的任何活動,並調用回調方法:
// creating the fragment here from the mainActivity
FragB fragB = new FragB();
getSupportFragmentManager().beginTransaction()
.replace(R.id.imager, fragB).commit();
// This is because my example activity implements FragBListener which is defined in the FragB class
@Override
public void onCallFromFragB() {
}
FragB
public class FragB extends Fragment {
private FragBListener activity;
....
public interface FragBListener{
void onCallFromFragB();
}
}
現在,您可以通過調用引用父活動getActivity上onAttach()
public void onAttach(Context context) {
super.onAttach(context);
....
activity = (FragBListener) getActivity();
}
現在你已經對這個活動的參考,你甚至可以從界面的實現方法。只要你不把它轉換給聽衆,你真的可以從父活動中調用任何公共方法,我只是更喜歡這種方式。
現在從活動中調用片段內部的方法更容易。像這樣:
FragB fragB= (FragB) getSupportFragmentManager().findFragmentById(R.id.imager);
if(fragB != null){
// FragB is in view
// call it's methods
}
這樣你的片段將是自包含的,並通過活動完成溝通,所以你不必擔心場景。你只是想確保你在片段上調用公共方法,只要它們不是null(在佈局中)。
僅供參考,你可以看到this.
好了,所以一切我已經提到,到目前爲止,這裏是你可以做什麼。
- 從活動中加載片段B.
- 單擊片段B的按鈕時。調用活動的方法,用片段B1替換片段B.
- B1則可以調用該活動的方法傳遞字符串,這樣的活動可以爲B設置爲您剛剛傳遞的字符串TextView的替代B1的onItemClickListener。
如果您不希望爲了解決界面問題,您也可以僅僅對活動進行類型化。例如,如果活動爲MainActivity,則從其片段之一調用時也可以使用
((MainActivity) getActivity()).[any public method]
也是可能的。
非常感謝你! –
隨時待命。祝你好運。 – Khanal