android - 将数据从 Activity 传递到已显示的 Fragment
问题描述
你如何将数据从活动传递到已经活动的片段?我可以使用捆绑包进行传输,但获得它的唯一方法是createView
在该片段上使用它,但我的问题是它已经创建。无论如何我可以将数据从活动传递到片段,然后在不使用的情况下调用该数据onCreateView
我试过这个链接来获得我需要的东西,但由于静态数据无法访问
解决方案
可以有多种方式
- 使用@Belbahar Raouf显示的
findFragmentById
那样获取 Fragment 实例。 - 用于在或之间
BroadcastReceiver
发送数据。它无处不在。但这可能有点长。Activity
Fragment
Service
您可以使用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 以方便使用。
推荐阅读
- javascript - 是否可以使用 Jquery 保留 img 标签和仅其他标签的文本?
- symfony - 如何仅显示特定行的数据
- python - 如何检测pygame中嵌套按钮内的鼠标点击
- python - 如何使用 django 建立一对一的聊天系统
- wordpress - 为什么我的 wordpress 本地化 var 在我的前端 js 中不可用
- ios - 使用 SwiftUI 在多个 iOS 设备上显示具有精确尺寸的标尺图像
- amazon-web-services - 为 AWS Elastic Beanstalk 环境使用 namecheap 域名?
- json - 替换其他键所在的值 - jq
- json - 将列表添加到来自 JSON 数据的 Picker.Item 组件反应本机博览会
- python - 嵌套范围仅适用于最后一个范围