场景:
你可能遇到过类似的情况:同一条数据在多个页面上展示,并且这些页面同时存在,在其中某一个页面上修改数据,其他页面能够及时更新。我在工作当中就遇到了一个类似的场景:我们APP内部做了一个论坛,每条帖子都可以被点赞,可以在列表页点赞也可以在详情页点赞。以前只有一个列表页,一个详情页,所以直接通过startActivityForResult和onActivityResult就可以在返回列表页的时候更新列表页的状态。后来又增加了一个列表页,跟前一个列表页有重复数据,上面的那个方法就玩不转了,只得另外在想办法。本文就是从这个问题出发,提出一个解决同类问题的通用方法。
架构:
核心思想:
借助EventBus构建一个Publish/Subscribe系统;
每个页面就是一个Observer,向EventBus订阅自己感兴趣的事件;
当数据对象(Subject)发生改变,发布(Publish)一个事件出来;
页面接收到事件更新自己持有的数据、修改页面展示。
实现:
事件基类:
public class BaseEvent {
public String uuid;
public BaseEvent(String uuid){
this.uuid = uuid;
}
public BaseEvent(){}
public boolean isMe(String me){
if(TextUtils.isEmpty(uuid)){