Maison  >  Questions et réponses  >  le corps du texte

Android - problème de communication entre deux fragments dans ViewPage en fragment

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中文网2713 Il y a quelques jours635

répondre à tous(2)je répondrai

  • 为情所困

    为情所困2017-05-16 13:23:02

    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 :🎜 🎜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 🎜 🎜.

    répondre
    0
  • 世界只因有你

    世界只因有你2017-05-16 13:23:02

    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

    répondre
    0
  • Annulerrépondre