RecyclerView+ListView
ListView和RecyclerView的异同:
(1)ViewHolder:在ListView中,ViewHolder需要自己来定义,RecyclerView中使用RecyclerView.ViewHolder则变成了必须
(2)LayoutManager:ListView只能在垂直方向上滚动,没有提供ListView在水平方向上面滚动的支持。RecyclerView相较于ListView,在滚动上面的功能扩展了许多。它可以支持多种类型列表的展示要求,如
GridLayoutManager,LinearLayoutManager
(3)ItemDecoration:控制Item间的间隔(可绘制)
(4)ItemAnimator:控制Item增删的动画
(5)必须自己实现Item点击,长按事件:没有AdapterView.OnItemClickListener接口来探测点击事件,自己实现控制点击、长按事件。
(6)RecyclerView支持嵌套滑动机制,可以实现与
(7)空数据的处理
(8)HeaderView 和 FooterView
(9)局部刷新
(10) CollapsingToolbarLayout
实现自定义间隔的思路:
继承RecyclerView.ItemDecoration实现它的onDraw和getItemOffset方法,获得一个代表分割线的drawable对象,遍历各个子Item, 结合子View的布局参数(padding,margin),确定分割线drawable的四个顶点的坐标,再在onDraw方法中把drawable画在canvas上;
实现onItemClickListener()和onItemLongClickListener()的思路:
(1)在adapter中自己去提供回调:在Adapter里面提供一个接口,然后在onBindViewHolder中去为holder.itemView去设置相应的监听,最后回调我们设置的监听函数
(2)在RecyclerView.OnItemTouchListener去监听然后去判断手势:
实现RecyclerView.OnItemTouchListener这个接口,在这个接口的构造函数里面,提供一个GestureDetector去监听手势,去判断是长按还是点击。
CardView
CardView继承自FrameLayout,可以让我们使用类似卡片布局来显示一致性效果的内容。同时卡片还可以包含圆角和阴影效果。