我正在开发应用RecyclerView
分页的Android应用。我在Executor
中使用Service
向API发送Web请求,然后在DB中保留已获取的数据。要通知DB中的更改,然后在我的适配器中应用新数据,我建议使用Otto事件总线。发布者/订阅者模式对我来说是相当新的,所以我试图找到好的教程或解释它应该如何工作,但经过两天的搜索后,我对我应该实现什么以及事件总线的工作原理只有模糊的想法。有人可以提供一个很好的提示我应该在哪里开始或链接教程或代码示例?我知道这是一个非常新手的问题,但我现在还没有看到替代方案。
答案 0 :(得分:1)
答案 1 :(得分:-1)
将此库导入您的应用程序级别Gradel:
implementation 'org.greenrobot:eventbus:3.0.0'
创建用于事件处理的类:
public class DataSyncEvent {
private final String syncStatusMessage;
private final String countryName;
private final int postion;
public DataSyncEvent(String syncStatusMessage, int postion, String countryName) {
this.syncStatusMessage = syncStatusMessage;
this.postion = postion;
this.countryName = countryName;
}
public String getSyncStatusMessage() {
return syncStatusMessage;
}
public String countryName() {
return countryName;
}
public int getPostion() {
return postion;
}
}
现在从您的班级/片段或服务中传递值:
EventBus.getDefault().post(new DataSyncEvent(leftOrRight, position, countryName));
不要忘记在使用@Subscribe的地方注册和注销总线
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
使用@Subscribe可以获得该值:
@Subscribe
public void onEvent(DataSyncEvent syncStatusMessage) {
if (syncStatusMessage.getSyncStatusMessage().contains("left")) {
leftPosition = syncStatusMessage.getPostion();
img_flag_left.setImageResource(countriesFlag[leftPosition]);
leftCountryName.setText(syncStatusMessage.countryName());
} else {
rightPosition = syncStatusMessage.getPostion();
img_flag_right.setImageResource(countriesFlag[rightPosition]);
rightCountryName.setText(syncStatusMessage.countryName());
}
}