RecyclerView封装是sparseArray有什么用?

Even_P 2018-10-26 03:49:32
protected <V extends View> V retrieveView(int viewId){
View view = views.get(viewId);
if(view == null){
view = mItemView.findViewById(viewId);
views.put(viewId,view);
}
return (V) view;
}
现在网上封装recyclerview时都喜欢写这么一个方法,但是根据我的测试,他这个view时一直为空的,然后找到他的原因时一直要new出这个viewholder来,所以一直都会重新new出sparseArray来,所以get的方法一直时空的,所以现在网上封装recycler View都是这种方法,难道是我的操作有问题?
...全文
643 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jklwan 2018-11-07
  • 打赏
  • 举报
回复
参考https://github.com/CymChad/BaseRecyclerViewAdapterHelper, 还有个简单的https://blog.csdn.net/xfhy_/article/details/78274652 只有复用holder的时候缓存才有效,否则都是new的holder,是没有缓存的。例如一个页面显示10条数据,只有显示10条以后的数据时缓存才会有效果。
Even_P 2018-11-07
  • 打赏
  • 举报
回复
引用 4 楼 jklwan 的回复:
[quote=引用 2 楼 q12q1ty 的回复:] 不存在的,你可以打断点去看一下, 你就会发现每次都会去findviewByid,并不会重sparseArray中获取
写的问题吧……用缓存没用还用缓存干啥。 [/quote] 我这里用的也是这样的,但是我去打断点发现每次获取到的View都是为空的,可以发一下你的代码吗?谢谢
jklwan 2018-11-06
  • 打赏
  • 举报
回复
引用 2 楼 q12q1ty 的回复:
不存在的,你可以打断点去看一下, 你就会发现每次都会去findviewByid,并不会重sparseArray中获取
写的问题吧……用缓存没用还用缓存干啥。
jklwan 2018-11-06
  • 打赏
  • 举报
回复
引用 2 楼 q12q1ty 的回复:
不存在的,你可以打断点去看一下, 你就会发现每次都会去findviewByid,并不会重sparseArray中获取
你不是问的ViewHolder的封装吗,怎么发个跳转Activity的。
Even_P 2018-11-06
  • 打赏
  • 举报
回复
引用 1 楼 jklwan 的回复:
其实就是缓存view,不用重复的findviewbyid,需要时直接返回。 如果没有这个view去find,并保存在views这个array中,下次再使用时就直接返回了。
不存在的,你可以打断点去看一下, 你就会发现每次都会去findviewByid,并不会重sparseArray中获取
jklwan 2018-10-29
  • 打赏
  • 举报
回复
其实就是缓存view,不用重复的findviewbyid,需要时直接返回。 如果没有这个view去find,并保存在views这个array中,下次再使用时就直接返回了。

80,350

社区成员

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

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