首页 > 解决方案 > 如何检查异步回调后 RecyclerView 适配器中的项目是否仍然可见

问题描述

我想更新一个调用异步调用内部服务器 API 的项目onBindViewHolder。我将位置 + 位置的项目发送到回调中。响应调用在 20 秒内到达回调函数。进入回调函数的是返回的响应和位置。然后我打电话notifyItemChanged(pos, response)。在有效载荷onBindViewHolder中,我更新了该位置的项目及其视图。问题是,如果异步请求需要 20 秒并且用户将快速滚动浏览RecyclerView,它将更新错误的项目View,因为该位置的视图可能未绑定或可能绑定到列表中的其他项目。

有什么方法可以跟踪哪个位置的哪个项目未绑定取消请求?我必须在创建适配器后更新这一信息,因为如果我之前这样做,用户将在近 2 分钟内看不到任何 recyclerView 项目,直到我的列表准备好。(只有这一个电话需要这么长时间)。

标签: androidandroid-recyclerview

解决方案


我不会将该职位作为上下文传递。我会传递一个标识符。可以是一个内部整数,如 id 或其他东西。然后,您可以轻松确定当前在屏幕上可见的 id,并查看该列表是否包含回调的 id。


推荐阅读