我正在进行网络通话,我从服务器上取出了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);
导致而不是在前两个位置添加项目,而是将它们添加到最后两个位置!这显然是错误的。
过去几个小时我一直在看它,但找不到一个容易解决的问题。有任何想法吗 ?