如何在类似按钮上通知其他屏幕点击android



假设我正在开发像facebook这样的社交媒体应用程序。我们可以在订阅源页面上看到帖子,点击任何帖子,该帖子都可以在帖子视图屏幕中看到。如果我按下后视图屏幕上的点赞按钮并返回,我可以在提要中看到,点赞已经更新。如何实现这一点,假设我的同一个帖子出现在不同的地方,当点击该帖子中的任何位置时,我想到处更新各自的帖子。我想像按钮一样实现,我在考虑观察者模式,但在实现方面我有点困惑。有人能分享一些参考资料吗?你们做得怎么样?

在您的特定示例中,最有可能发生的是来自包含新信息的databasepush。你点击类似的按钮,它会向数据库发送更新,当数据库发生变化时,你会有观察者对其进行轮询。点赞是由数据库决定的,而不是您点击点赞按钮的事实,即single source of truth

RxJava2/3中,当谈到可观测模式时,它是最好的库。就RxJava而言

Flowable是一种可以不断更新的类型。以下是DTO函数与名为PostRoom实体混合的示例。

//in DTO
@Query("Select likes from post where post.id = :id")
public Flowable<Integer> getLikes(long id);
//in View (Fragment/Activity)
public void watchLikes(Post post){
database.postDto.getLikes(post.getId())
.observeOn(Scheduler.io()) // doesn't block main thread while watching
.subscribeOn(Schedular.io()) // forces main thread to post changes
.subscribe(new FlowableSubscriber<Integer>() {
@Override
public void onComplete() {}
@Override
public void onError(Throwable t) {}
@Override
public void onNext(Integer likes) {
//allows the update of a view from another thread via a post.
runOnUIThread(new Runnable(){ 
@Override
public void run(){
//Update view that contains post with new likes number.
}
});
}
@Override
public void onSubscribe(Subscription subscription) {
subscription.request(Long.MAX_VALUE); //so it never stops
}
}
);
}

我不会在实际用例中使用这个例子,因为有更好的选项,比如Paging,将整个帖子列表添加到RecyclerViewAdapter,并使用diff算法更新整个列表。

最新更新