adapter异步数据与空间绑定

我是萌新别看我 2020-08-06 05:17:42
recycleview中有textview。textview的值是通过adapter中onbindviewholder方法内进行okhttp异步获取。但是会出现错乱的问题,出现用户头像和用户名不一致的问题。 (盲猜可能控件没绑定,赋给了其他的textview) 该怎么解决
...全文
2507 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
不行。还是不正确。我用的hanlder接收,tag不对应的话。是不会赋值的。
ink_s 2020-08-07
  • 打赏
  • 举报
回复
添加一个UPDATA方法,okhttp获取到值后存到list中,然后刷新list public void upData(ArrayList<FileBean> data) { this.flies = data; notifyDataSetChanged(); }
闫文敬 2020-08-07
  • 打赏
  • 举报
回复
不会不显示的,如果被复用,说明这个viewitem已经不可见了,故不显示;同时它还会被显示viewitem赋值的
  • 打赏
  • 举报
回复
引用 2 楼 蓝色的天空ywj的回复:
原因: 控件复用,因为是异步操作,导致网络请求完成后设置内容时textView被更新了,异步没有先后顺序,容易错乱。 解决方案: 在adapter中先通过textView.setTag(position),设置当前位置标记,在网络请求完成后,再次通过int currentPosition = (int) textView.getTag() ,进行判断position是否等于currentPosition,如果相等进行setText("xxxx"),否则说明这个位置被其他条目复用的,此时已经不显示了,不再赋值即可。
我知道这个原理。但是因为要显示用户名。所以不能不显示。而且要每个都要显示正确
  • 打赏
  • 举报
回复
引用 1 楼 ink_s的回复:
这种一般都是先获取数据再生成list吧
对的。但是我需求是。在呈现的时候。请求数据并填充
闫文敬 2020-08-07
  • 打赏
  • 举报
回复
原因: 控件复用,因为是异步操作,导致网络请求完成后设置内容时textView被更新了,异步没有先后顺序,容易错乱。 解决方案: 在adapter中先通过textView.setTag(position),设置当前位置标记,在网络请求完成后,再次通过int currentPosition = (int) textView.getTag() ,进行判断position是否等于currentPosition,如果相等进行setText("xxxx"),否则说明这个位置被其他条目复用的,此时已经不显示了,不再赋值即可。
ink_s 2020-08-07
  • 打赏
  • 举报
回复
这种一般都是先获取数据再生成list吧

80,357

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧