" Recycleview"之间有什么区别?和" Listview"在Android上?
Android中Recycleview和Listview的确切含义。
答案 0 :(得分:5)
ListView
课程有点太重了 - 它有很多责任。每当我们必须处理列表时,例如以某种方式配置它,唯一的方法是通过ListView
对象或适配器内部。
我们在ListView中讨厌的很多东西都是在RecyclerView
中修复或更改的。默认情况下它更有效,布局是分开的,我们对适配器内的数据集有更多的可能性。
这些是ListView
和RecyclerView
之间的重要区别:
ViewHolder
模式允许我们使列表滚动顺利进行。它存储列表行视图引用,因此,调用findViewById()
方法只会发生几次,而不是整个数据集和每个bind view
。
RecyclerView
的适配器强制我们使用ViewHolder
模式。创建部分(使布局膨胀并查找视图)和更新视图分为两种方法 - onCreateViewHolder()
和onBindViewHolder()
。
另一方面,ListView
默认情况下不会给我们这种保护,所以如果不在ViewHolder
方法中实施getView()
模式,我们就会结束在列表中滚动效率低下。
LayoutManager
负责布局行视图。多亏了这一点,RecyclerView
不必考虑如何定位行视图。这个类让我们有机会选择我们想要显示行视图的方式以及如何滚动列表。例如,如果我们要垂直或水平滚动列表,我们可以选择LinearLayoutManager
。对于网格,更适合选择GridLayoutManager
。
以前,通过使用ListView,我们只能创建 垂直滚动 列表,因此它不那么灵活。如果我们想要列表中的网格,我们必须选择其他窗口小部件 - GridView
。
ItemDecoration
ItemDecoration
的职责在理论上很简单 - 为列表行视图添加一些装饰 - 但实际上,如果我们想创建一个自定义的那个,那么实现起来就很简单了。在这种情况下,我们应该扩展ItemDecoration
类并实现我们的解决方案。例如,RecyclerView
列表默认情况下行之间没有分隔符,并且与Material Design准则一致。但是,如果我们想要出于某种原因添加分隔符,我们可以使用
DividerItemDecoration并将其添加到RecyclerView
。
如果我们使用ListView,我们必须自己计算行装饰。此小部件没有像ItemDecoration
这样的辅助类。
我要提及的RecyclerView
的最后但并非最不重要的部分是ItemAnimator
。正如我们所料,它正在处理行视图动画,如列表外观和消失,添加或删除特定视图等。默认情况下,RecyclerView
的列表动画非常流畅。当然,我们可以通过创建自己的ItemAnimator
来改变它,这也不是那么容易。为了更容易,我们应该扩展SimpleItemAnimator类并实现我们需要的方法(只需将动画添加到ViewHolder的视图中)。
说实话,在ListView上实现动画是一件痛苦的事。同样,我们必须弄清楚我们想要如何处理它们。
我们在RecyclerView
的适配器上有几个很酷的通知程序。我们仍然可以使用notifyDataSetChanged()
,但也有特定列表元素,例如notifyItemInserted()
,notifyItemRemoved()
甚至notifyItemChanged()
等等。我们应该使用最适合的实际情况,这样正确的动画才能正常启动。
使用ListView
,我们只能在适配器上使用notifyDataSetChanged()
,然后我们必须自己处理其余部分。