Android 将数据从活动传递到已显示的片段

Android 将数据从活动传递到已显示的片段,android,android-fragments,android-activity,Android,Android Fragments,Android Activity,如何将数据从活动传递到已处于活动状态的片段?我可以使用bundle进行传输,但获得它的唯一方法是在该片段上使用createView,但我的问题是它已经被创建了。我是否可以将数据从活动传递到片段,然后调用该数据,而无需使用onCreateView 我尝试了此操作以获取所需的数据,但由于静态原因无法访问数据如果视图已创建,则onCreateview将不会调用,因此您可以通过广播接收器传递数据 BroadcastReceiver receiverUpdateDownload = new Broadc

如何将数据从活动传递到已处于活动状态的片段?我可以使用bundle进行传输,但获得它的唯一方法是在该片段上使用
createView
,但我的问题是它已经被创建了。我是否可以将数据从活动传递到片段,然后调用该数据,而无需使用
onCreateView


我尝试了此操作以获取所需的数据,但由于静态原因无法访问数据

如果视图已创建,则onCreateview将不会调用,因此您可以通过广播接收器传递数据

 BroadcastReceiver receiverUpdateDownload = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            //Getdata from intent
        }
    };
在onCreateView中重新设置广播接收器

IntentFilter filter = new IntentFilter("STRING_ID_FOR_BRODCAST");
getActivity().registerReceiver(receiverUpdateDownload, filter);
在onStop上注销您的接收器

@Override
public void onStop() {
    super.onStop();
    if (receiverUpdateDownload != null) {
        try {
            getActivity().unregisterReceiver(receiverUpdateDownload);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
从ActtCity给你的兄弟打电话

 Intent intent = new Intent("STRING_ID_FOR_BRODCAST");
 intent.putExtra("key","value");
 sendBroadcast(intent);

根据文件:

宿主活动可以通过捕获 使用findFragmentById()分割实例,然后直接调用 fragment的公共方法

示例(在活动中声明):


在你的片段中,实现实现这个技巧的方法。

可以有多种方法

  • 使用
    findFragmentById
    获取片段实例,如@Belbahar Raouf所示
  • 使用
    广播接收器
    活动
    片段
    服务
    之间发送数据。它无处不在。但它可能有点冗长
  • 您可以使用,这是GreenBot的一项伟大发明只需一行即可传递数据。

    EventBus.getDefault().post(newmessageevent())

有关实施,请参阅

创建一个将被传递的模型类
MessageEvent.java
。 在
片段中订阅您的侦听器。
使用
片段生命周期注册和注销事件总线
。 从您的
活动
,只需触发事件,
片段将收到该事件。
在此之前,将依赖关系添加到渐变中

implementation 'org.greenrobot:eventbus:3.1.1'
EventBus最棒的东西- 它在
活动
片段
服务
中工作。你不需要做什么 具有多种意图类型的多个广播接收器。只需在 单行代码


为了便于使用,我还使用了EventBus。通过回调接口,请看这里,您应该在我的答案中查看EventBus。这是我找到的最简单的解决方案。@Khemraj确实正在阅读它,还加上1我应该在活动和片段中放置什么代码?你需要在片段中放置Broadcast,只需在活动中放置sendBrodcast(ans中的最后一个代码),每当你调用
Intent Intent=new Intent时,它就会触发你的Broadcast接收器(“STRING_ID_FOR_BRODCAST”);
已经完成了,但是如何获取数据?比如将数据传递给toast?没有通过intent传递数据,比如
intent.putExtra(“key”,“1”);
这里,在您将在onReceive中获得数据之后,我传递值1,比如
Bundle b=intent.getExtras()STRING a=b.getString(“key”)
您将收到字符串A中的1,这是您每咬一口都会看到的东西哈哈哈TYSM:染料,这是您要感测数据的片段。我不知道,但当我写入时,它会变成红色。尽管它存在
public static class MessageEvent { /* Additional fields if needed */ }
@Subscribe(threadMode = ThreadMode.MAIN)  
public void onMessageEvent(MessageEvent event) {/* Do something */};
@Override
 public void onStart() {
     super.onStart();
     EventBus.getDefault().register(this);
 }

 @Override
 public void onStop() {
     super.onStop();
     EventBus.getDefault().unregister(this);
 }
EventBus.getDefault().post(new MessageEvent());
implementation 'org.greenrobot:eventbus:3.1.1'