首页 > 解决方案 > 确保网络调用仅在 recyclerview 行中的每个按钮执行一次(RxJava)

问题描述

我有一个片段,其中包含一个显示用户搜索结果的 RecyclerView。RecyclerView 中的每个用户行都包含一个关注/取消关注按钮,单击该按钮会导致托管片段在其 Presenter 中执行适当的网络调用(使用 MVP)。

我要解决的问题是如何确保如果用户在给定行上敲击关注/取消关注按钮,网络调用只执行一次(我知道这个特定问题可以解决如果只有一个按钮,则使用 switchmap)。但是,由于每一行都有一个按钮,我不希望之前的网络调用被取消,例如,如果用户点击一个用户的关注,然后马上点击另一个用户的关注。

这是片段的外观示例:

在此处输入图像描述

任何有关如何实现此目的的建议将不胜感激。

编辑:忘了提到我正在使用 RxJava 进行网络,我希望将它用于解决方案

标签: javaandroidandroid-recyclerviewrx-javarx-java2

解决方案


你提到了 switchMap,所以你可能会使用 RxJava 进行网络,在这种情况下,我会建议在网络处理期间禁用按钮。看起来像这样:

followButton.clicks()
    .doOnNext { followButton.setEnabled(false) }
    .switchMap( your network Observable or Single)
    .subscribe {
        followButton.setEnable(true);
        followButton.setText("newText");
    }

推荐阅读