Android:Otto 事件总线实现
Android: Otto event bus implementation
我正在开发 Android 应在 RecyclerView
上使用分页的应用程序。我在 Service
中使用 Executor
向 API 发出网络请求,然后将获取的数据保存在数据库中。要通知数据库中的更改,然后在我的适配器中应用新数据,我建议使用 Otto 事件总线。 Publisher/subscriber 模式对我来说很新,所以我试图找到好的教程或解释它应该如何工作,但经过两天的搜索后,我对我应该实现什么以及事件总线实际如何工作只有模糊的想法。有人可以在教程或代码示例中给出我应该从哪里开始或 link 的好提示吗?我知道这是一个真正的新手问题,但目前我没有看到其他选择。
我找到的最佳指南是:来自 Vogella and from Codepath。我希望它能帮助别人。根据我的经验,好的注意事项 - Otto EventBus 工作同步,记住它。
将此库导入您的应用级等级:
implementation 'org.greenrobot:eventbus:3.0.0'
为事件处理创建一个 class:
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;
}
}
现在从您的 class/fragment 或服务传递值:
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());
}
}
我正在开发 Android 应在 RecyclerView
上使用分页的应用程序。我在 Service
中使用 Executor
向 API 发出网络请求,然后将获取的数据保存在数据库中。要通知数据库中的更改,然后在我的适配器中应用新数据,我建议使用 Otto 事件总线。 Publisher/subscriber 模式对我来说很新,所以我试图找到好的教程或解释它应该如何工作,但经过两天的搜索后,我对我应该实现什么以及事件总线实际如何工作只有模糊的想法。有人可以在教程或代码示例中给出我应该从哪里开始或 link 的好提示吗?我知道这是一个真正的新手问题,但目前我没有看到其他选择。
我找到的最佳指南是:来自 Vogella and from Codepath。我希望它能帮助别人。根据我的经验,好的注意事项 - Otto EventBus 工作同步,记住它。
将此库导入您的应用级等级:
implementation 'org.greenrobot:eventbus:3.0.0'
为事件处理创建一个 class:
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;
}
}
现在从您的 class/fragment 或服务传递值:
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());
}
}