使用顶部

时间:2017-04-14 19:22:41

标签: android android-recyclerview

我正在进行网络通话,我从服务器上取出了RecyclerView上显示的50个项目。如果用户继续滚动,我会再获取50个(使用page_num = 2,3等等)并且每次都有50个项目。

因此,假设目前向用户显示了150个项目。我正在做的是:

    // This call is inside my `Fragment` class
    for (NotificationsServiceResponseNestedItem item: notificationsList){
        if (!dataset.contains(item)) {
            adapter.addItem(item);
        }
    }

// this call is inside my `Adapter` class
public void addItem(NotificationsServiceResponseNestedItem item) {
    dataset.add(item);
    notifyItemInserted(dataset.size() - 1);
}

如果用户滚动,那么我的适配器中有150个项目意味着上面的循环执行了3次。我还将数据集保存在我的Fragment和我的Adapter类中(但这与我的问题无关 - 我只是指出所以没有任何误解)

现在如果用户停留在这个屏幕上,我每隔X秒就会一直调用服务器,所以我一直得到相同的50个项目(循环根本不运行,因为如果条件不正确且一切都正常)。有时会有几个新项目,所以我从服务器获得的50个项目中说:48已经存在并且正在我的RecyclerView中显示,其中两个是新的 - 所以我应该将它们添加到适配器并显示它们。

问题是:notifyItemInserted(dataset.size() - 1);导致而不是在前两个位置添加项目,而是将它们添加到最后两个位置!这显然是错误的。

过去几个小时我一直在看它,但找不到一个容易解决的问题。有任何想法吗 ?

0 个答案:

没有答案