android - 如何检查异步回调后 RecyclerView 适配器中的项目是否仍然可见
问题描述
我想更新一个调用异步调用内部服务器 API 的项目onBindViewHolder
。我将位置 + 位置的项目发送到回调中。响应调用在 20 秒内到达回调函数。进入回调函数的是返回的响应和位置。然后我打电话notifyItemChanged(pos, response)
。在有效载荷onBindViewHolder
中,我更新了该位置的项目及其视图。问题是,如果异步请求需要 20 秒并且用户将快速滚动浏览RecyclerView
,它将更新错误的项目View
,因为该位置的视图可能未绑定或可能绑定到列表中的其他项目。
有什么方法可以跟踪哪个位置的哪个项目未绑定取消请求?我必须在创建适配器后更新这一信息,因为如果我之前这样做,用户将在近 2 分钟内看不到任何 recyclerView 项目,直到我的列表准备好。(只有这一个电话需要这么长时间)。
解决方案
我不会将该职位作为上下文传递。我会传递一个标识符。可以是一个内部整数,如 id 或其他东西。然后,您可以轻松确定当前在屏幕上可见的 id,并查看该列表是否包含回调的 id。
推荐阅读
- html - 如何仅使用 css 选择具有特定属性的元素?
- ios - 如何更改位置 UIDatePicker?
- scala - Spark UDF 没有将列值从 null 更改为 0
- javascript - 一个脚本可以单击两个不同页面上的按钮?
- scikit-learn - 如何在 sklearn 的 DecisionTreeClassifier 树中获取哪些叶子包含哪些训练样本
- sql - SAP Webi 中带有条件运算符的嵌套 if 语句
- angular - 未创建测试中的 Angular 指令
- sql - pyodbc 错误:'HY090',无效的字符串或缓冲区长度 (0)
- vhdl - 有没有办法通过 Quartus 13.1 中的大学程序 VWF 监控内部信号的状态?
- lisp - ACL2 决策树执行递归调用失败