Maison > Questions et réponses > le corps du texte
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 ?
为情所困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 :
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)
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()
方法选定之后, 最后需要注意的是:
FragmentPagerAdapter
和FragmentStatePagerAdapter
在管理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 :🎜FragmentPagerAdapter
etFragmentStatePagerAdapter
sont différents lors de la gestion deFragment
: le traitement du recyclage deFragment
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 lorsqueFragment
est recyclé et réapparaît à l'écran 🎜 🎜.répondre0
世界只因有你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