简介
RecyclerView架构提供了一种插拔式的体验,它具有高度的解耦、异常的灵活性和更高的效率,通过设置它提供的不同
LayoutManager、ItemDecoration、ItemAnimator 可实现更加丰富多样的效果。但是RecyclerView也有缺点和
让人头疼的地方:设置列表的分割线时需要自定义,另外列表的点击事件需要自己去实现。
RecyclerView的使用
- 与ListView不同的一点就是,需要设置布局管理器用于设置条目的排列样式,可以是垂直排列或者水平
排列。这里我们设置setLayoutManager(new LinearLayoutManager(this))表示条目是线性排列的(默认
是垂直排列的)。
注:如果要设置成水平排列,可写成:
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
- Adaper最大的改进就是对ViewHolder进行了封装定义,我们只需要自定义一个ViewHolder继承
RecyclerView.ViewHolder就可以了。另外,Adaper 继承了RecyclerView.Adapter,在onCreateViewHolder中加载条目布局,在onBindViewHolder中将视图与数据进行绑定。 - 设置分割线:
我们可以使用mRecyclerView.addItemDecoration()来加入分割线。这就需要我们继承RecyclerView.ItemDecoration来自定义分割线。 - 自定义点击事件
列表中条目的点击事件需要我们自己来定义,这是一个不尽如人意的地方。但是,自定义点击事件也
并不是很难。在Adaper中定义接口并提供回调,我们在这里定义了条目的点击事件和长按点击事件。接下来对item中的控件进行点击事件监听并回调给我们自定义的监听 最后在activity中进行监听的实现 (但是这样点击事件和adapter的耦合性较高)
多个item中的控件监听和整个item监听,也可直接监听
可以把监听事件单独封装起来 - 实现GridView
自定义横向的分割线然后在代码中设置 - 实现瀑布流
只要在Adaper 写一个随机的高度来控制每个 item的高度就可以了。通常这个高度
是由服务端返回的数据高度来控制的,在这里我们写一个随机的高度来控制每个item的高度。
接着我们在Adaper的onBindViewHolder中设置每个item的高度