Android 将数据从活动传递到已显示的片段
如何将数据从活动传递到已处于活动状态的片段?我可以使用bundle进行传输,但获得它的唯一方法是在该片段上使用Android 将数据从活动传递到已显示的片段,android,android-fragments,android-activity,Android,Android Fragments,Android Activity,如何将数据从活动传递到已处于活动状态的片段?我可以使用bundle进行传输,但获得它的唯一方法是在该片段上使用createView,但我的问题是它已经被创建了。我是否可以将数据从活动传递到片段,然后调用该数据,而无需使用onCreateView 我尝试了此操作以获取所需的数据,但由于静态原因无法访问数据如果视图已创建,则onCreateview将不会调用,因此您可以通过广播接收器传递数据 BroadcastReceiver receiverUpdateDownload = new Broadc
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的公共方法 示例(在活动中声明):
在你的片段中,实现实现这个技巧的方法。可以有多种方法
- 使用
获取片段实例,如@Belbahar Raouf所示findFragmentById
- 使用
在广播接收器
、活动
或片段
之间发送数据。它无处不在。但它可能有点冗长服务
- 您可以使用,这是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'