首页 > 解决方案 > 将数据从 Activity 传递到已显示的 Fragment

问题描述

你如何将数据从活动传递到已经活动的片段?我可以使用捆绑包进行传输,但获得它的唯一方法是createView在该片段上使用它,但我的问题是它已经创建。无论如何我可以将数据从活动传递到片段,然后在不使用的情况下调用该数据onCreateView

我试过这个链接来获得我需要的东西,但由于静态数据无法访问

标签: androidandroid-fragmentsandroid-activity

解决方案


可以有多种方式

  • 使用@Belbahar Raouf显示的findFragmentById那样获取 Fragment 实例。
  • 用于在或之间BroadcastReceiver发送数据。它无处不在。但这可能有点长。ActivityFragmentService
  • 您可以使用GreenBot的一项伟大发明 EventBus。只需一行即可传递数据。

    EventBus.getDefault().post(new MessageEvent());

有关实现,请参阅事件总线文档

制作一个将被传递的模型类MessageEvent.java

public static class MessageEvent { /* Additional fields if needed */ }

订阅您的听众Fragment

@Subscribe(threadMode = ThreadMode.MAIN)  
public void onMessageEvent(MessageEvent event) {/* Do something */};

使用 注册和注销事件总线Fragment Lifecycle

@Override
 public void onStart() {
     super.onStart();
     EventBus.getDefault().register(this);
 }

 @Override
 public void onStop() {
     super.onStop();
     EventBus.getDefault().unregister(this);
 }

从您的Activity, just fire 事件中,这将由Fragment.

EventBus.getDefault().post(new MessageEvent());

在此之前将依赖项添加到您的 gradle。

implementation 'org.greenrobot:eventbus:3.1.1'

EventBus最好的东西-

它适用于Activity, Fragment& Services。您不需要制作具有多种意图类型的多个广播接收器。只需在一行代码中发布事件。

我还使用 EventBus 以方便使用。


推荐阅读