Android控件系列——RecyclerView和ListView对比

RecyclerView和ListView对比

ViewHolder

均是用来保存视图引用的类

ListView
ViewHolder需自己定义,可选择是否使用。如不使用,getView时会多次调用findViewById(),带来性能问题
RecycleView
必须自定义类使用RecycleView.ViewHolder类

布局效果

ListView
只能垂直方向滑动,系统API无水平方向滑动的支持
RecycyleView
支持多种类型列表的展示,如LinearLayoutManager,StaggeredGridLayoutManager,GridLayoutManager
可在LayoutManager中自定义layout,如scrollToPosition(), setOrientation(), getOrientation(), findViewByPosition()等

空数据处理

ListView
setEmptyView()处理Adapter中数据为空的情况
RecycleView
需手动判断,实现数据为空的情况

HeaderView 与 FooterView

ListView
通过addHeaderView()addFooterView() 添加首尾item,下拉刷新和上拉加载时,两个API不会影响Adapter的编写
RecycleView
自定义首尾item,根据ViewHolder的Type与View实现自己的Header。会影响到Adapter的数据,添加后,实际的Position将大于数据的Position

数据刷新

ListView
使用notifyDataSetChanged()全局刷新
可在Adapter中实现onItemChanged()方法,获取到数据变化的item的position(getFirstVisiblePosition ()),然后调用getVIew()局部刷新
RecycleView
使用notifyItemChanged()局部刷新

动画

RecycyleView
RecyclerView.ItemAnimator提供动画用于列表的添加,删除或移动。如RecyclerView.setItemAnimator(new DefaultItemAnimator())

点击事件

ListView
系统提供AdapterView.OnItemClickListener接口实现条目点击事件
RecycyleView
系统提供RecyclerView.OnItemTouchListener接口实现条目触摸事件

嵌套滚动机制

RecycleView
嵌套滚动机制,能让子View与父View同时处理Touch事件。主要在于实现NestedScrollingChildNestedScrollingParent两个接口。RecycleView实现的是前者

添加分隔符

ListView
android:divider="@android:color/transparent"
android:dividerHeight=“5dp”

猜你喜欢

转载自blog.csdn.net/mLuoya/article/details/87927040