Android – Kommunikationsproblem zwischen zwei Fragmenten in ViewPage im Fragment
PHP中文网
PHP中文网 2017-05-16 13:21:02
0
2
693

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?

PHP中文网
PHP中文网

认证高级PHP讲师

Antworte allen(2)
为情所困

题主所说如果只是Toolbar与Fragment的交互, 那就比较简单了:

  1. 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被回收后以及再次出现在屏幕上时, App应该如何处理(保存&还原)题中所说的Fragments之间的交互关系.

世界只因有你

如果是两个Fragment 之间要互通数据 可以用 EventBus

如果只是在操作 toolbar 切换fragment,加载 fragment 直接传入 数据

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage