一直想總結(jié)一下Fragment與Fragment冲呢、Activity通信的問題舍败,今天有時間一共總結(jié)了三種,權(quán)當(dāng)拋磚引玉敬拓,如果大家還有更好的方式來實現(xiàn)Fragment和Fragment邻薯、Activity的通信,歡迎提出來乘凸,我們一起學(xué)習(xí)厕诡。
我們就來看看怎樣實現(xiàn)兩個Fragment之間的通信。
1.直接在一個Fragment中調(diào)用另外一個Fragment中的方法
我們可以直接在一個Fragment中調(diào)用另外一個Fragment的公開方法营勤,前提是要先拿到另外一個Fragment的實例灵嫌,我們先來看看怎樣在左邊的Fragment中拿到右邊Fragment的實例:
ContentFragment?cf?=?(ContentFragment)?getActivity()
.getFragmentManager().findFragmentById(
R.id.content_fg);
cf.showPro(name);
我們通過宿主Activity拿到FragmentManager,進而再拿到右邊的Fragment葛作,然后調(diào)用右邊Fragment里邊的showPro方法寿羞,其中要傳入的參數(shù)是左邊點擊的人名,我們看看右邊Fragment中的showPro方法:
public?void?showPro(String?key)?{
list?=?map.get(key);
adapter?=?new?ArrayAdapter(getActivity(),
android.R.layout.simple_list_item_1,?list);
lv.setAdapter(adapter);
}
先根據(jù)傳進來的人名拿到該人作品的數(shù)據(jù)集进鸠,然后構(gòu)造一個adapter賦值給listview稠曼,很簡單吧。使用這種方式我們可以直接在一個Fragment中調(diào)用另一個Fragment的公開方法,從而實現(xiàn)兩個Fragment的通信霞幅。
這種方法適于那些我們在布局文件中就已經(jīng)定義了的Fragment漠吻,這種Fragment每個都有id,可以通過FragmentManager找到司恳,但是如果我們使用了ViewPager途乃,即每個Fragment都是動態(tài)添加進來的,這個時候我們無法通過FragmentManager獲得另外一個Fragment的實例扔傅,那么該怎么辦呢耍共?這時我們就要用到下面這種方式了。