gpt4 book ai didi

android - Android上的 "Recycleview"和 "Listview"有什么区别?

转载 作者:行者123 更新时间:2023-11-29 15:39:26 25 4
gpt4 key购买 nike

Android中的“Recyclerview”和“Listview”有什么区别?
Android中Recyclerview和Listview的确切含义。

最佳答案

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

关于android - Android上的 "Recycleview"和 "Listview"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43523129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com