suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Android – Kommunikationsproblem zwischen zwei Fragmenten in ViewPage im Fragment

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中文网2744 Tage vor661

Antworte allen(2)Ich werde antworten

  • 为情所困

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

    题主所说如果只是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之间的交互关系.

    Antwort
    0
  • 世界只因有你

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

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

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

    Antwort
    0
  • StornierenAntwort