1.查看持有人
在ListView中,定义视图所有者是保留视图引用的建议方法。但这不是强迫。尽管没有这样做,但ListView使用了显示过时的数据。不使用视图持有者的另一个主要缺点可能导致每次通过id查找视图的操作繁重。这导致了ListViews的延迟。
通过使用RecyclerView.ViewHolder类,可以在RecylerView中解决此问题。这是RecyclerView和ListView的主要区别之一。在实现RecyclerView时,此类用于定义ViewHolder对象,适配器将其用于将ViewHolder与位置绑定。这里要注意的另一点是,在实现RecyclerView适配器时,必须提供ViewHolder。这使实现有些复杂,但是解决了ListView中面临的问题。
2.布局管理器
说到ListView,只有一种类型的ListView可用,即垂直ListView。您不能使用水平滚动来实现ListView。我知道有多种方法可以实现水平滚动,但是我相信它并不是设计成可以这种方式工作的。
但是现在,当我们查看Android RecyclerView与ListView时,我们也支持水平集合。实际上,它支持多种类型的列表。为了支持多种类型的列表,它使用RecyclerView.LayoutManager类。这是ListView没有的新功能。RecyclerView支持三种类型的预定义布局管理器:
LinearLayoutManager –对于RecyclerView,这是最常用的布局管理器。这样,我们可以创建水平和垂直滚动列表。StaggeredGridLayoutManager –通过此布局管理器,我们可以创建交错列表。就像Pinterest屏幕一样。GridLayoutManager –此布局管理器可用于显示网格,就像任何图片库一样。
3.项目动画师
列表中的动画是一个全新的维度,它具有无限的可能性。因此,在ListView中,没有特殊的规定可以使人动画,添加或删除项目。后来,随着Android的发展,Google的Chet Haase在此视频教程中建议使用ViewPropertyAnimator来实现ListView中的动画。
另一方面,比较Android RecyclerView与ListView,它具有RecyclerView.ItemAnimator类,用于处理动画。通过此类,可以为项目添加,删除和移动事件定义自定义动画。如果不需要任何自定义,它还提供一个DefaultItemAnimator。
4.适配器
ListView适配器易于实现。他们有一个主要的方法getView,在这里曾经发生过所有的魔术。视图绑定到的位置。他们还曾经有一个有趣的方法registerDataSetObserver,可以在适配器中设置一个观察者。此功能也存在于RecyclerView中,但是使用了RecyclerView.AdapterDataObserver类。但是支持ListView的一点是它支持适配器的三种默认实现:
ArrayAdapter CursorAdapter SimpleCursorAdapter而RecyclerView适配器具有ListView适配器具有的所有功能,但对DB游标和ArrayLists的内置支持除外。从现在开始,在RecyclerView.Adapter中,我们必须进行自定义实现以向适配器提供数据。就像BaseAdapter用于ListViews一样。尽管如果您想了解有关RecyclerView适配器实现的更多信息,请参考Android RecyclerView示例。
5.通知数据变更
使用ListView时,如果更改了数据集,则必须调用基础适配器的notifyDataSetChanged方法来刷新数据。或将setNotifyOnChange方法设置为true,以防您希望自动调用notifyDataSetChanged方法。但是在这两种情况下,列表上的结果都很重。基本上,它刷新列表的视图。
但是相反,在RecyclerView适配器中,如果单个项目或一系列项目已更改,则有相应的方法来通知更改。它们分别是notifyItemChanged和notifyItemRangeChanged,还有更多类似的东西:
notifyItemInsterted notifyItemMoved notifyItemRangeInsterted notifyItemRangeRemoved当然,它具有刷新整个列表的原始方法,即notifyDataSetChanged,它通知适配的整个数据集已更改。
6.物品装饰
要在ListView中显示自定义分隔符,可以在ListView XML中轻松添加以下参数:
XHTML android:divider =“ @ android:color / transparent” android:dividerHeight =“ 5dp” 1 2 android:divider =“ @ android:color / transparent” android:dividerHeight =“ 5dp”关于Android RecyclerView的有趣之处在于,截至目前,默认情况下它不会显示项目之间的分隔线。尽管Google的人员一定有意保留此设置以进行自定义。但这极大地增加了开发人员的工作量。如果希望在项目之间添加分隔符,则可能需要使用RecyclerView.ItemDecoration类进行自定义实现。
或者,您可以通过使用官方样本中的以下文件来应用黑客:DividerItemDecoration.java
7. OnItemTouchListener
列表视图过去具有用于检测点击的简单实现,即通过使用AdapterView.OnItemClickListener接口。
但另一方面,RecyclerView.OnItemTouchListener接口用于检测Android RecyclerView中的触摸事件。它使实现复杂一些,但可以更好地控制开发人员以拦截触摸事件。官方文档指出,它对于手势操作很有用,因为它在将触摸事件传递给RecyclerView之前会拦截触摸事件。
RecyclerView
使用更好的API可以更快,更通用。诸如动画添加或删除项目之类的事情已经在中实现,RecyclerView
而您无需执行任何操作。毫无疑问,将您ListView
的垃圾桶扔进去,这RecyclerView
是在窃取节目。