android - fragment中ViewPage中有兩個(gè)fragment的通信問(wèn)題
問(wèn)題描述
在主的fragment中有一個(gè)toolbar下面是ViewPager,ViewPager里面是fragment。現(xiàn)在我要操作toolbar上面的按鈕,改變ViewPager中的Fragment中的數(shù)據(jù),有什么好的通信方式。
問(wèn)題解答
回答1:題主所說(shuō)如果只是Toolbar與Fragment的交互, 那就比較簡(jiǎn)單了:
Activity#setActionBar(android.widget.Toolbar) 或者 AppCompatActivity#setSupportActionBar(android.support.v7.widget.Toolbar)
Fragment#setHasOptionsMenu(boolean)
Fragment內(nèi)部的ActionBar的處理同Activity, 見(jiàn)下圖:
p.s.分割線(xiàn)以下為Fragment之間的交互的相關(guān)資料.
最簡(jiǎn)單的方式是EventBus, 可選庫(kù):
greenrobot/EventBus
AndroidKnife/RxBus
square/otto
其次就是LocalBroadcastManager, 參考資料:
Android Developer Reference # android.support.v4.content.LocalBroadcastManager
再次就是Fragment借助Activity來(lái)進(jìn)行交互, 參考資料:
Android Developer Guide # Communicating with Other Fragments
Android Developer Guide # Fragment
最后就是直接通過(guò)TargetFragment來(lái)實(shí)現(xiàn), 相關(guān)函數(shù):
Fragment#setTargetFragment(android.app.Fragment, int)
Fragment#getTargetFragment()
Fragment#getTargetRequestCode()
方法選定之后, 最后需要注意的是:
FragmentPagerAdapter和FragmentStatePagerAdapter在管理Fragment時(shí)是有差別: 回收Fragment的處理是不同的. 因此, 需要考慮的是, 當(dāng)Fragment被回收后以及再次出現(xiàn)在屏幕上時(shí), App應(yīng)該如何處理(保存&還原)題中所說(shuō)的Fragments之間的交互關(guān)系.
回答2:如果是兩個(gè)Fragment 之間要互通數(shù)據(jù) 可以用 EventBus
如果只是在操作 toolbar 切換fragment,加載 fragment 直接傳入 數(shù)據(jù)
相關(guān)文章:
1. php - 微信開(kāi)發(fā)驗(yàn)證服務(wù)器有效性2. php如何獲取訪(fǎng)問(wèn)者路由器的mac地址3. 小程序怎么加外鏈,語(yǔ)句怎么寫(xiě)!求救新手,開(kāi)文檔沒(méi)發(fā)現(xiàn)4. javascript - 在 vue里面用import引入js文件,結(jié)果為undefined5. javascript - 我的站點(diǎn)貌似被別人克隆了, google 搜索特定文章,除了域名不一樣,其他的都一樣,如何解決?6. php - mysql 模糊搜索問(wèn)題7. python沒(méi)入門(mén),請(qǐng)教一個(gè)問(wèn)題8. 求救一下,用新版的phpstudy,數(shù)據(jù)庫(kù)過(guò)段時(shí)間會(huì)消失是什么情況?9. html - 爬蟲(chóng)時(shí)出現(xiàn)“DNS lookup failed”,打開(kāi)網(wǎng)頁(yè)卻沒(méi)問(wèn)題,這是什么情況?10. javascript - js setTimeout在雙重for循環(huán)中如何使用?
