RecyclerView设计思想初体验
昨天看了Google I/O 16中关于RecyclerView的视频「RecyclerView Ins and Outs」,里面谈到了RecyclerView的一些设计思想。简单地说一下感受。
RecyclerView的设计初衷是为了更好地自定义列表显示。在RecyclerView的实际使用中,整体感受是职责做了更好的分离,使用起来自定义程度更高。
ListView与RecyclerView的对比
1、ListView列表显示提供的很多功能,本身可能并不需要。如Header、Divider等。RecyclerView中,把这些可选的功能划分到下属的组件中,用户可选进行实现,更灵活。
如item的点击事件
ListView的点击事件监听是对整个item进行点击监听。监听事件的设置是在ListView中通过setOnItemClick()进行设置的。
而现实情况中,每个item的需要点击的视图可能不单单只有整体的item,item的其他元素,如点赞按钮等,都需要实现局部点击。因此,ListView不能满足需求。
RecyclerView中,默认不提供点击事件的监听。如果开发者需要对RecyclerView中的item需要点击的View进行监听,需要在Adapter或者ViewHolder中自行监听相应View的点击事件。这样设置点击事件更灵活,自由度更高。
再如分割线的实现
ListView中,分割线可通过ListView.addHeader() / addFooter()方法添加分割线。但是这种方法的局限是只能传入View对象。
而在RecyclerView中,分割线等功能可以通过RecyclerView.ItemDecoration类实现。对视图的定制更灵活,可实现StickyHeader(分类悬浮Header)等酷炫功能。
2、职责分离,功能解耦
如RecyclerView与LayoutManager的职责分离。
在ListView时代,只能实现垂直列表。而若需要使用其他形式显示,只能替换其他View来实现。而在RecyclerView中,显示形式(垂直显示、网格显示)通过LayoutManager控制,与RecyclerView解耦。RecyclerView只需要通过setLayoutManager()方法,传入不同的LayoutManager,就可以动态地切换显示形式,无需更换View。
再如,Adapter对每个Item视图的创建与绑定操作分离。
在ListView时代,界面的创建和绑定都需要在Adapter重写的getView()方法中进行。若处理不当,会造成视图的重复inflate的问题,降低性能。
而在RecyclerView的Adapter中,创建视图onCreateViewHolder()与绑定视图onBindViewHolder()是分离的。
对于我这种Android菜鸟来说,RecyclerView的设计思想感觉是挺棒的。觉得RecyclerView更多地把自身的职责进行了分离、解耦,提高了扩展性,使用者可以很灵活地对其进行扩展。
小弟进入Android开发的世界不到一年,文中的内容可能会有说得不对的地方。欢迎读者指正~
RecyclerView的设计初衷是为了更好地自定义列表显示。在RecyclerView的实际使用中,整体感受是职责做了更好的分离,使用起来自定义程度更高。
ListView与RecyclerView的对比
1、ListView列表显示提供的很多功能,本身可能并不需要。如Header、Divider等。RecyclerView中,把这些可选的功能划分到下属的组件中,用户可选进行实现,更灵活。
如item的点击事件
ListView的点击事件监听是对整个item进行点击监听。监听事件的设置是在ListView中通过setOnItemClick()进行设置的。
而现实情况中,每个item的需要点击的视图可能不单单只有整体的item,item的其他元素,如点赞按钮等,都需要实现局部点击。因此,ListView不能满足需求。
RecyclerView中,默认不提供点击事件的监听。如果开发者需要对RecyclerView中的item需要点击的View进行监听,需要在Adapter或者ViewHolder中自行监听相应View的点击事件。这样设置点击事件更灵活,自由度更高。
再如分割线的实现
ListView中,分割线可通过ListView.addHeader() / addFooter()方法添加分割线。但是这种方法的局限是只能传入View对象。
而在RecyclerView中,分割线等功能可以通过RecyclerView.ItemDecoration类实现。对视图的定制更灵活,可实现StickyHeader(分类悬浮Header)等酷炫功能。
2、职责分离,功能解耦
如RecyclerView与LayoutManager的职责分离。
在ListView时代,只能实现垂直列表。而若需要使用其他形式显示,只能替换其他View来实现。而在RecyclerView中,显示形式(垂直显示、网格显示)通过LayoutManager控制,与RecyclerView解耦。RecyclerView只需要通过setLayoutManager()方法,传入不同的LayoutManager,就可以动态地切换显示形式,无需更换View。
再如,Adapter对每个Item视图的创建与绑定操作分离。
在ListView时代,界面的创建和绑定都需要在Adapter重写的getView()方法中进行。若处理不当,会造成视图的重复inflate的问题,降低性能。
而在RecyclerView的Adapter中,创建视图onCreateViewHolder()与绑定视图onBindViewHolder()是分离的。
对于我这种Android菜鸟来说,RecyclerView的设计思想感觉是挺棒的。觉得RecyclerView更多地把自身的职责进行了分离、解耦,提高了扩展性,使用者可以很灵活地对其进行扩展。
小弟进入Android开发的世界不到一年,文中的内容可能会有说得不对的地方。欢迎读者指正~
评论
发表评论