如何将数据从活动传递到已经活动的片段?我可以使用捆绑包进行传输,但是我唯一可以获取的方法是对该片段使用createView
,但是我的问题是它已经创建了。无论如何,我可以将数据从活动传递到片段,然后在不使用onCreateView
我尝试过此link来获取所需的信息,但是由于静态原因,无法访问数据
答案 0 :(得分:2)
如果已创建视图,则不会调用onCreateview,因此您可以通过 BroadcastReceiver
传递数据 BroadcastReceiver receiverUpdateDownload = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//Getdata from intent
}
};
在onCreateView中让您的BroadcastReceiver过期
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();
}
}
}
通过活动呼叫您的广播
Intent intent = new Intent("STRING_ID_FOR_BRODCAST");
intent.putExtra("key","value");
sendBroadcast(intent);
答案 1 :(得分:2)
可以有多种方式
findFragmentById
获取片段实例。BroadcastReceiver
在Activity
,Fragment
或Service
之间发送数据。它无处不在。但这可能有点冗长。您可以使用 EventBus ,这是GreenBot的一项伟大发明。 只需一行即可传递数据。
EventBus.getDefault().post(new MessageEvent());
有关实现,请参见Event bus documentation。
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
,只是火灾事件,Fragment
将会收到此事件。EventBus.getDefault().post(new MessageEvent());
在将依赖项添加到gradle之前。
implementation 'org.greenrobot:eventbus:3.1.1'
它可以在
Activity
,Fragment
和Services
中使用。你不需要做 具有多种意图类型的多个广播接收器。只需在发布活动 一行代码。
答案 2 :(得分:0)
根据文档:
主机活动可以通过捕获 使用findFragmentById()的片段实例,然后直接调用 片段的公共方法。
示例(在您的活动中声明):
ArticleFragment articleFrag = (ArticleFragment)
getSupportFragmentManager().findFragmentById(R.id.article_fragment);
if (articleFrag != null) {
// If article frag is available
// Call a method in the ArticleFragment to update its content
articleFrag.updateArticleView(position);
}
然后在您的片段中实现将完成此操作的方法。