Dans le fragment principal, il y a une barre d'outils avec un ViewPager en dessous et un fragment à l'intérieur du ViewPager. Maintenant, je veux utiliser le bouton de la barre d'outils et modifier les données dans le fragment du ViewPager. Existe-t-il une bonne méthode de communication ?
Comme l'a dit l'interrogateur, s'il ne s'agissait que de l'interaction entre la barre d'outils et Fragment, ce serait relativement simple :
Activity#setActionBar(android.widget.Toolbar)
ouAppCompatActivity#setSupportActionBar(android.support.v7.widget.Toolbar)
Activity#setActionBar(android.widget.Toolbar)
或者AppCompatActivity#setSupportActionBar(android.support.v7.widget.Toolbar)
Fragment#setHasOptionsMenu(boolean)
Fragment
内部的ActionBar的处理同Activity, 见下图:p.s.分割线以下为Fragment之间的交互的相关资料.
最简单的方式是EventBus, 可选库:
greenrobot/EventBus
AndroidKnife/RxBus
square/otto
其次就是LocalBroadcastManager, 参考资料:
Android Developer Reference # android.support.v4.content.LocalBroadcastManager
再次就是Fragment借助Activity来进行交互, 参考资料:
Android Developer Guide # Communicating with Other Fragments
Android Developer Guide # Fragment
最后就是直接通过TargetFragment来实现, 相关函数:
Fragment#setTargetFragment(android.app.Fragment, int)
Fragment#getTargetFragment()
Fragment#getTargetRequestCode()
方法选定之后, 最后需要注意的是:
Fragment#setHasOptionsMenu(boolean)
🎜 🎜🎜Le traitement d'ActionBar à l'intérieur deFragment
est le même que celui d'Activity, comme le montre la figure ci-dessous :🎜 🎜p.s. Sous la ligne de démarcation se trouvent les informations pertinentes sur l'interaction entre les fragments.🎜
🎜Le moyen le plus simple est EventBus, bibliothèques optionnelles :🎜 🎜 🎜🎜robot vert/EventBus🎜 🎜🎜AndroidKnife/RxBus🎜 🎜🎜carré/otto🎜 🎜Le second est LocalBroadcastManager, référence :🎜
🎜🎜Référence du développeur Android # android.support.v4.content.LocalBroadcastManager🎜
🎜Encore une fois, Fragment utilise Activity pour interagir, référence : 🎜 🎜 🎜🎜Guide du développeur Android # Communiquer avec d'autres fragments🎜 🎜🎜Guide du développeur Android # Fragment🎜 🎜Enfin, il est implémenté directement via TargetFragment, fonctions associées : 🎜 🎜 🎜🎜Fragment#setTargetFragment(android.app.Fragment, int)🎜 🎜🎜Fragment#getTargetFragment()🎜 🎜🎜Fragment#getTargetRequestCode()🎜🎜Après avoir sélectionné la méthode, la dernière chose à laquelle vous devez faire attention est :🎜
Si vous souhaitez échanger des données entre deux fragments, vous pouvez utiliser EventBus
Si vous utilisez simplement la barre d'outils pour changer de fragment, chargez le fragment et transmettez directement les données