Android文档说:
RecyclerView小部件是一个更高级,更灵活的版本 列表显示。此小组件是用于显示大型数据集的容器 通过保持有限的数量可以非常有效地滚动 观点。有数据收集时使用RecyclerView小部件 其元素在运行时根据用户操作或网络而更改 事件
如果效率不重要,ListView
实际上可以完成以上所有操作,当我们使用RecyclerView
替换ListView
时,我们发现了很多问题:
答案 0 :(得分:117)
如果ListView适合您,则没有理由进行迁移。 如果您正在编写新的UI,那么使用RecyclerView可能会更好。
当您需要自定义列表或想要更好的动画时,RecyclerView功能强大。 ListView中的这些便捷方法给人们带来了很多麻烦,这就是为什么RecyclerView为他们提供了更灵活的解决方案。
迁移所需的主要更改是在适配器中。如果你想继续打电话notifyDataSetChanged
,你就失去了大部分动画片。约束利益。但是,如果您可以更改适配器以分派详细的通知事件(添加/删除/移动/更新),那么您可以获得更好的动画和性能。这些事件让RecyclerView选择了正确的动画,它还有助于避免不必要的onBind
调用。如果您的商品浏览量很复杂,您将获得巨大的收益。此外,未来,RecyclerView将会有更多组件。
答案 1 :(得分:23)
据我所知,如果ListView满足您应用的所有当前需求并满足所有用例,则无需使用RecyclerView替换它。
RecyclerView以增加开发人员的复杂性为代价,为开发人员提供了巨大的力量。有些事情可以在ListView中轻松完成,现在可以花费很多不必要的努力。
但是,是的,ListView可以做很多事情,比如令人惊讶的LayoutManager功能,它可以让你动态地将布局无缝地改为水平,垂直,网格或交错网格。
我写了一篇关于这个主题的详细答案here。
答案 2 :(得分:8)
1 您可以使用界面提供点击侦听器。我也将这种技术用于ListViews
2 没有分隔符:只需在行中添加宽度为 match_parent 且高度为 1dp 的视图,并为其指定背景颜色即可。
3 只需使用StateList选择器作为行背景
也可以在ListViews中避免使用 4 addHeaderView:只需将标题放在视图之外。
因此,如果你关心效率,那么是,用RecyclerView替换ListView是一个好主意。
答案 3 :(得分:5)
直到最近,我仍然对非常简单的列表使用ListView。例如,如果我想显示一个简单的文本选项列表...
我的决定基于“人为因素”,即如果性能不重要,则用更少的代码创建一个简单的ListView会更好。我经常想起一个大学教授,他喜欢这样说:“我的老师帕斯卡(Pascal)的发明家伟大的尼古拉斯·沃斯(Niclaus Wirth)曾经说过,如果一个程序有50行以上的代码,那肯定是错的……”
但是说服我停止使用ListView的是,它最近已与RelativeLayout一起移入了Android Studio设计工具中的“旧版”类别。
我认为这是“弃用”的“软”形式。如果实际上不建议使用它,并且所有尽职尽责的开发人员将其代码移至RecyclerView,将会造成破坏性的影响。
此外,ListView的简介在顶部警告说RecyclerView是更好的选择:“要使用更现代,灵活和高效的方法来显示列表,请使用RecyclerView。”
https://developer.android.com/reference/android/widget/ListView
此外,ListView指南仍在讨论游标加载程序,但是getSupportCursorLoader()本身在API 28中已被弃用。
https://developer.android.com/guide/topics/ui/layout/listview
Android Studio的最新增强功能:
文件->新建->片段->片段(列表)
这为我们提供了一个工作正常的RecylerView,其中填充了基本文本。这摆脱了我使用ListView的最后一个真实原因,因为现在设置基本的RecylerView变得一样容易。
总而言之,我不打算将ListView完全用于新开发,因为将其标记为“旧版”距离淘汰它仅一步之遥。
答案 4 :(得分:3)
当列表不是动态的或受网络事件影响时,唯一可以使用ListView的情况。例如:导航。
对于任何其他用途,RecyclerView使ListView黯然失色。由于RecyclerView只关心回收,因此更容易做出与ListView紧密耦合的视觉相关事物,如更改位置/重新排列,动画(事实上它附带RecyclerView.ItemAnimator),自定义布局(除了库存还有StaggeredGrid)旧的列表或网格样式,但也有这个library,它扩展了更多)。
此外,如果您想使用CardView,我相信这是唯一的方法(一些good reading何时使用卡片或列表。)
答案 5 :(得分:1)
一个很好的选择是使用BaseAdapter。它支持使用Viewholder模式,我的包含100多行,包含位图和按钮,它运行非常流畅。
答案 6 :(得分:0)
RecyclerView是ListView和GridView的高级版本,具有改进的性能和其他优点。它比ListView和GridView更加灵活和高效。
RecyclerView是一个ViewGroup,用于基于大量数据项显示元素的垂直和水平滚动列表。 RecyclerView是android support-v7版本的小部件。
RecyclerView小部件是一个用于显示大型数据集的容器,该容器可以通过维护有限数量的视图而非常高效地滚动,并且元素会在运行时根据用户操作或网络事件而变化。
要在Android中实现RecyclerView,只需添加以下代码:
在项目build.gradle文件中实现RecyclerView库:
implementation 'com.android.support:recyclerview-v7:28.0.0-rc01'
将RecyclerView添加到您的主布局:
<android.support.v7.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="2dp">
</android.support.v7.widget.RecyclerView>
创建自定义布局资源文件-
现在最终创建一个CustomAdapter和setAdapter()的实例到RecyclerView或仅实现以下代码:
RecyclerView rv = (RecyclerView)findViewById(R.id.rv);
ad = new CustomAdapter(MainActivity.this,drawableArray,titleArray,subtitleArray);
rv.setAdapter(ad);
rv.setLayoutManager(new LinearLayoutManager(this));
rv.setHasFixedSize(true);
How to implement Recycler view in android app ?
快乐编码...