Heim > Fragen und Antworten > Hauptteil
Im Hauptfragment gibt es eine Symbolleiste mit einem ViewPager darunter und ein Fragment innerhalb des ViewPagers. Jetzt möchte ich die Schaltfläche in der Symbolleiste betätigen und die Daten im Fragment im ViewPager ändern. Gibt es eine gute Kommunikationsmethode?
为情所困2017-05-16 13:23:02
题主所说如果只是Toolbar与Fragment的交互, 那就比较简单了:
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
被回收后以及再次出现在屏幕上时, App应该如何处理(保存&还原)题中所说的Fragments之间的交互关系.
世界只因有你2017-05-16 13:23:02
如果是两个Fragment 之间要互通数据 可以用 EventBus
如果只是在操作 toolbar 切换fragment,加载 fragment 直接传入 数据