在新闻类APP的开发过程中,肯定会遇到很多上下部分布局相似,但是中间的功能却有些区别的需求。比如同样是一条新闻,有些新闻有视频、有些新闻有图片、有些新闻又只有文字。
按照自己项目中的情况,有好几种类型的控件都是放在了一个VIewHolder中。这样一来如果使用同一种ViewHolder,RecyclerView在复用的时候就会出现一些情况,本身没有视频的ViewHolder出现了视频控件、本身只有文字的新闻会出现图片,而且还有可能ViewHolder在初始化的时候明明用不到视频控件,却对它进行了初始化,导致浪费了时间,造成卡顿。
在RecyclerView 中是根据ViewHolder来进行复用的,如果一种ViewHolder中的控件足够少,那么它的初始化时间也就少。
至于担心太多类型的ViewHolder导致加载速度慢的问题,可以自己建一个JAVA测试下switch(int)的速度。
例如:
信息流页面经常会有一些类似的结构
相似的地方:
顶部都有用户信息、标题、内容。
底部是时间信息、评论数、阅读数
不同的地方:
中间可能有图片、链接帖信息、文件帖信息、视频等等结构。
XML文件结构:
<include/>//头部结构
<ViewStub/>//中间的结构
<ViewStub/>//中间的结构
......//可能很多
<include/>//底部结构
在使用的时候顶部和底部统一处理(可以使用继承的方式),然后不同的ViewHolder初始化不同的ViewStub。
这样不同的ViewHolder能够用统一的布局,在修改上边与下边布局的时候不会影响到中间,并且也不会漏改文件。同时,中间的布局只有对应的ViewHolder才会初始化,并不占用内存。