Android - problème de communication entre deux fragments dans ViewPage en fragment
PHP中文网
PHP中文网 2017-05-16 13:21:02
0
2
692

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 ?

PHP中文网
PHP中文网

认证高级PHP讲师

répondre à tous(2)
为情所困

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 :

  1. Activity#setActionBar(android.widget.Toolbar) ou AppCompatActivity#setSupportActionBar(android.support.v7.widget.Toolbar)Activity#setActionBar(android.widget.Toolbar) 或者 AppCompatActivity#setSupportActionBar(android.support.v7.widget.Toolbar)

  2. Fragment#setHasOptionsMenu(boolean)

  3. Fragment内部的ActionBar的处理同Activity, 见下图:

p.s.分割线以下为Fragment之间的交互的相关资料.


最简单的方式是EventBus, 可选库:

  1. greenrobot/EventBus

  2. AndroidKnife/RxBus

  3. square/otto

其次就是LocalBroadcastManager, 参考资料:

  • Android Developer Reference # android.support.v4.content.LocalBroadcastManager

再次就是Fragment借助Activity来进行交互, 参考资料:

  1. Android Developer Guide # Communicating with Other Fragments

  2. Android Developer Guide # Fragment

最后就是直接通过TargetFragment来实现, 相关函数:

  1. Fragment#setTargetFragment(android.app.Fragment, int)

  2. Fragment#getTargetFragment()

  3. Fragment#getTargetRequestCode()


方法选定之后, 最后需要注意的是:

FragmentPagerAdapterFragmentStatePagerAdapter在管理Fragment时是有差别: 回收Fragment的处理是不同的. 因此, 需要考虑的是, 当Fragment

Fragment#setHasOptionsMenu(boolean)🎜 🎜🎜Le traitement d'ActionBar à l'intérieur de Fragment 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 :🎜
🎜FragmentPagerAdapter et FragmentStatePagerAdapter sont différents lors de la gestion de Fragment : le traitement du recyclage de Fragment est donc différent . , ce qu'il faut considérer, c'est comment l'application doit gérer (enregistrer et restaurer) la relation interactive entre les fragments mentionnés dans la question lorsque Fragment est recyclé et réapparaît à l'écran 🎜 🎜.
世界只因有你

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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal