Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

该library并没有用上RecyclerView的缓存机制 #17

Open
z3896823 opened this issue May 19, 2017 · 3 comments
Open

该library并没有用上RecyclerView的缓存机制 #17

z3896823 opened this issue May 19, 2017 · 3 comments

Comments

@z3896823
Copy link

首先感谢作者的无私分享。

经过打印日志发现,不论是向下滑还是向右话,只要是没出现过的view,都会调用onCreateViewHolder方法去inflate视图,这样其实ViewHolder根本没发挥其视图缓存的功能,因为每次都是在加载新的视图。

才疏学浅,仅能提供一个hint给作者,希望作者有一天能够修复这个问题。

@Kelin-Hong
Copy link
Owner

你好,控件是有View的复用,我特意又打了断点测试了一下,没办法做到二维的完全复用,但是并不是每次都执行onCreateViewHolder 方法,你可以简单的测试下,打开Demo,向右滑到底后,再向左滑onCreateViewHolder 就不执行了(上下滑同理)。或者你可以在 onCreateViewHolder 打log,然后看看滑动新增可见的View 的个数 是否==onCreateViewHolder执行的个数来判断有无View复用。或者看下源码,是一个二维的Recycler 叠加的控件,实现原理有视图缓存的,只是不能很完全每个View都做到复用。

@z3896823
Copy link
Author

z3896823 commented May 22, 2017

非常感谢你的回复。

其实我们俩说的是同一回事,可能我之前的表达有误。我的意思是能不能提供一个类似于convertView的机制,将滑出屏幕的视图进行回收,让即将展现的视图使用被回收的视图,这样只需要调用(一屏的view个数多一点)次onCreateViewHolder方法,或许可以提高性能,解决卡顿现象。

ps:非常喜欢这个库,使用简单方便,自定义程度高,只是横滑的卡顿着实让体验大打折扣。我最近也有抽空学习源码,希望能贡献自己的一份力量。再次感谢分享。

@z3896823
Copy link
Author

z3896823 commented May 23, 2017

搜索了很多资料,依然没搞清楚RecyclerView的回收机制,索性今天抽空用ListView写了个类似的库,由于使用的是原生ListView,所以保留了ListView的特性。因为我感觉ListView的回收机制好控制一些,实现了一样的效果,差不多解决了卡顿问题吧。。如果可以的话请指导一下,谢谢!

https://github.com/z3896823/PanelList

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants