AnZ*_*AnZ 6 tabs android broadcastreceiver android-fragments android-broadcast
问题如下.让我们有3个带片段的标签:
如您所见,选项卡3和选项卡2包含相同的片段但不同的实例.
如何将数据(不是通过参数)发送到Tab 2?
我尝试过的:
Local Broadcast Receiver对片段B的两个实例注册相同onReceive()检查接收的ID是否等于片段的ID但不幸的是,广播仅被发送到Tab 3.
编辑:更多信息.
这些选项卡托管在另一个片段中ViewPager.这是因为它们的组合NavigationDrawer与ViewPager提到的Tabs和Tabs有关.
我建议EventBus在你的应用程序中介绍.
添加依赖项 - 添加compile 'de.greenrobot:eventbus:2.4.0'到依赖项列表中.
然后,您只需订阅第三个选项卡的片段以从第一个片段中侦听事件.
像这样:在片段B中
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
eventBus.register(this);
}
@Override
public void onDetach() {
eventBus.unregister(this);
super.onDetach();
}
@SuppressWarnings("unused") // invoked by EventBus
public void onEventMainThread(NewDataEvent event) {
// Handle new data
}
Run Code Online (Sandbox Code Playgroud)
NewDataEvent.java
public class NewDataEvent extends EventBase {
public NewDataEvent() {}
}
Run Code Online (Sandbox Code Playgroud)
在片段A中只发送事件:
protected EventBus eventBus;
....
eventBus = EventBus.getDefault();
....
eventBus.post(new NewDataEvent());
Run Code Online (Sandbox Code Playgroud)
(并避免在第二个选项卡中处理事件 - 只需在片段实例化期间传递额外参数,如果必须侦听事件)
片段是否在一个活动中托管?然后,您可以在托管活动上实现一个界面.
YourActivity implements MyInterface {
...
}
Run Code Online (Sandbox Code Playgroud)
在你的片段中你定义了这个:
@Override
public void onAttach(final Activity context) {
myInterface = (MyInterface) context;
}
Run Code Online (Sandbox Code Playgroud)
当你单击片段中的某些内容然后调用myInterface.doSomething(parameter);.然后您的活动可以委托给另一个片段.
| 归档时间: |
|
| 查看次数: |
751 次 |
| 最近记录: |