Android开发之“ListView与RecyclerView的对比”

在Android开发最火热的时候ListView是最长使用的一种展示多item的控件,而在2018年的现在已经很少有人用ListView了,使用最多当数RecyclerView了。

下面总结一下两者的区别:

  1. 两者的用法区别
  2. 布局效果
  3. 对空数据的处理
  4. HeaderView与FooterView
  5. 局部刷新
  6. 动画效果
  7. Item的点击事件
  8. 嵌套滚动机制

1、ListView与RecyclerView的用法区别

1)LisView的适配器需要继承BaseAdapter类;而RecyclerView的适配器继承自RecyclerView.Adapter
2)ListView需要自定义ViewHolder,与自定义ViewHolder、converView的优化(判断是否为null);
而RecyclerView只需要继承RecycelerView.ViewHolder,它的holder类是封装好的
3)子item的复用,ListView需要setTag()和getTag();而RecyclerView则不需要
4)RecyclerView需要做LayoutManager工作,并且实现了布局效果多样化

2、布局效果的区别

1)ListView的布局比较单一,只有纵向效果;而RecyclerView的布局效果较多,在LayoutManager中可以设置常见的线性布局(横向、纵向),表格布局瀑布流布局

2)RecyclerView可以在LayoutManager中自定义Layout,如scrollToPosition(),setOrientation(),findViewByPosition()等

3、空数据处理

  • ListView中可以设置空数据,调用setEmptyView()方法处理数据为空的情况;而RecyclerView没有对应的方法,需要自己判断数据是否为空

4、HeaderView与FooterView

  • ListView中可以设置addHeaderView()和addFooterView()来添加头部item和底部item,实现下拉刷新上拉加载的情况;而RecyclerView中没有这两个方法,如果需要可以在Adapter中自己定义

5、局部刷新

  • ListView中数据刷新通常使用notifyDataSetChanged(),但是这种属于全局刷新(每个item都要重新加载一遍);RecyclerView可以实现局部刷新,如notifyItemChanged()
  • ListView 也可以实现局部item刷新,当一个item刷新时,在Adapter中,实现一个onItemChanged()方法,在方法里面获取这个item的position,然后调用getView方法来刷新这个item的数据。

6、动画效果

  • 在RecyclerView中,已经封装好API来实现自己的动画效果;有许多动画API,例如:notifyItemChanged(), notifyDataInserted(), notifyItemMoved()等等;如果我们需要淑贤自己的动画效果,我们可以通过相应的接口实现自定义的动画效果(RecyclerView.ItemAnimator类),然后调用RecyclerView.setItemAnimator() (默认的有SimpleItemAnimator与DefaultItemAnimator);
  • 但是ListView并没有实现动画效果,但我们可以在Adapter自己实现item的动画效果;

7、嵌套滚动

  • 在事件分发机制中,Touch事件在进行分发的时候,由父View向子View传递,一旦子View消费这个事件的话,那么接下来的事件分发的时候,父View将不接受,由子View进行处理;但是与Android的事件分发机制不同,嵌套滚动机制(Nested Scrolling)可以弥补这个不足,能让子View与父View同时处理这个Touch事件,主要实现在于NestedScrollingChildNestedScrollingParent这两个接口;而在RecyclerView中,实现的是NestedScrollingChild,所以能实现嵌套滚动机制;
  • ListView就没有实现嵌套滚动机制

猜你喜欢

转载自blog.csdn.net/weixin_38664232/article/details/85225957