首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android: Otto事件总线实现

Android: Otto事件总线实现
EN

Stack Overflow用户
提问于 2015-12-15 14:48:46
回答 2查看 817关注 0票数 2

我正在开发安卓应用程序,它应该在RecyclerView上使用分页。我在Service中使用Service向API发出then请求,然后在DB中持久化获取数据。要通知DB中的更改,然后在适配器中应用新数据,我建议使用Otto事件总线。Publisher/订户模式对我来说是很新的,所以我试图找到一个很好的教程或解释它是如何工作的,但是经过两天的搜索,我对应该实现什么以及事件总线是如何工作的只有模糊的想法。有人能给出一个很好的提示,我应该从哪里开始或链接教程或代码示例?我知道这是一个非常新鲜的问题,但我认为目前没有其他选择。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-10 08:44:48

我发现的最好的指南是:来自沃盖拉科佩拉斯。我希望它能对某人有所帮助。好的笔记根据我的经验-奥托EventBus同步工作,记住它。

票数 1
EN

Stack Overflow用户

发布于 2019-03-13 09:46:46

将此库导入应用程序级gradel:

代码语言:javascript
复制
implementation 'org.greenrobot:eventbus:3.0.0'

创建用于事件处理的类:

代码语言:javascript
复制
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;
    }
}

现在从类/片段或服务传递值:

代码语言:javascript
复制
EventBus.getDefault().post(new DataSyncEvent(leftOrRight, position, countryName));

不要忘记在您使用@订阅的地方注册和注销总线。

代码语言:javascript
复制
@Override
    public void onStart() {
        super.onStart();
        EventBus.getDefault().register(this);
    }
    @Override
    public void onStop() {
        super.onStop();
        EventBus.getDefault().unregister(this);
    } 

通过@订阅,您可以获得该值:

代码语言:javascript
复制
 @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());
        }


    }
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34292182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档