在本文中,我们将介绍:

  1. 为什么ListView需要?
  2. 怎么RecyclerView接手的ListView?
  3. ReyclerViewwith的实施ListAapter。为了更好地理解,我们将创建一个示例项目😉

为什么需要 ListView?

正如我们所知,如今大多数应用程序都使用可滚动屏幕,例如 WeChat 聊天、Facebook 帖子、Tencent 视频。你有没有看到共同点?布局是一样的,只是改变了数据!。实际上,您不能自己手动添加所有这些视图,因为您不知道运行时的内容数量。例如:你不知道我会有多少聊天。

出于这个原因,我们需要 ListView 来帮助我们显示水平/垂直可滚动的视图集合。

RecyclerView 如何接管 Listview

首先RecyclerView是为了填补ListView. 当涉及到一长串列表时,创建视图是昂贵的,它确实变得昂贵。假设一个带有食物列表的食品订购应用程序,可能有 100 或数千种食物,在您的移动屏幕上您只看到 10 种(假设大小限制)。那么这些视图是如何绘制在屏幕上的呢?让我们来看看。

ListView每次滚动新项目时只需创建新视图,即如果列表中有 1000 个项目ListView将创建 1000 个视图。创建和绘制成本非常高。

在这种情况下,Recyclerview将只创建一次需要在屏幕上显示的视图数量(在本例中为 10 个)。但是如果我滚动呢?开发人员不用担心,当您向下滚动时,上部视图会被回收以用作新的底部视图,并且数据已更改,仅此而已。

android RecyclerView 设置header android recyclerview动态添加item_数据

  • 其中,RecyclerView诸如动画添加或删除项目之类的操作已经实现,您无需执行任何操作。
  • ListView仅支持带有行显示视图的垂直滚动,而RecyclerView支持水平、网格和交错布局,您只需提及使用LayoutManager.

让我们用 ListAdapter 实现 Recycler View

到目前为止,您已经大致了解我们为什么使用 RecyclerView。RecyclerView 使得显示大量数据变得非常容易。我们只需要提供数据和布局(它应该看起来如何),它会为您动态创建元素。现在让我们创建一个名为RecyclerView_fun.

打开Android Studio并按照以下步骤操作:-

  1. 创建一个项目:
  • 点击新建项目
  • 选择空活动。,点击NEXT

android RecyclerView 设置header android recyclerview动态添加item_android_02

  • 选择一个应用程序和包名称,点击FINISH。

android RecyclerView 设置header android recyclerview动态添加item_recycler-view_03


2. RecyclerView在 XML 中定义

  • 打开activity_main.xml

开始输入 <recyclerView. 将出现自动建议,单击它,或从下面手动输入或复制。

android RecyclerView 设置header android recyclerview动态添加item_List_04

<androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
   />
  1. 创建单项布局,它将在 RecyclerView 中显示为列表。
  • 右键单击 res -> 新建 -> 布局资源文件 -> 选择

android RecyclerView 设置header android recyclerview动态添加item_数据_05

  • 给一个名字,item_student因为我们将显示学生的数据。

android RecyclerView 设置header android recyclerview动态添加item_recycler-view_06

  • 根据您的喜好创建一个设计,我创建了一个简单的:p

android RecyclerView 设置header android recyclerview动态添加item_android_07


4. 创建一个模型类,数据源(我们要展示的对象类型)

  • 创建一个StudentModel具有name,roll number属性的数据类。

android RecyclerView 设置header android recyclerview动态添加item_数据_08


RecyclerView 准备好了,item_view 准备好了,data Source 也准备好了。现在我们需要有人把他们绑起来。 适配器来了。Adapter 是 View 和 Data 之间的桥梁,它基本上接受布局和数据,然后将两者绑定并显示在 RecyclerView 上。

如今,我们使用ListAdapterover RecyclerView.Adapter(),因为它提供了有关添加/删除项目的良好功能。

ListAdapter不等于ListView。

  1. 创建一个ListAdapter
  • 创建一个StudentAdapter扩展类ListAdapter<>

android RecyclerView 设置header android recyclerview动态添加item_android_09

  • Listadapter采用 2 个类型参数:
  • 第一:此适配器将接收的列表的类型。
  • 第二:ViewHolder适配器将使用的扩展类。

它应该看起来像这样。

android RecyclerView 设置header android recyclerview动态添加item_recycler-view_10

  • 通过将鼠标悬停在类名称上来实现成员:

android RecyclerView 设置header android recyclerview动态添加item_recycler-view_11

  • 现在构造方法onCreateViewHolder,当 RecyclerView 需要一个给定类型的新 [ViewHolder] 来表示一个项目时调用它。创建一个视图并返回它。

android RecyclerView 设置header android recyclerview动态添加item_List_12

  • 在里面MyViewHolder我可以访问item_student,引用各个视图,以便我可以将动态数据绑定到它。

android RecyclerView 设置header android recyclerview动态添加item_数据_13

  • 实现时间,onBindViewHolder由RecyclerView调用,在指定位置显示数据。此方法应更新 [ViewHolder.itemView] 的内容以反映给定位置的项目。

android RecyclerView 设置header android recyclerview动态添加item_recycler-view_14


但仍然ListAapter给我们红色信号,因为它需要一个DiffUtil.ItemCallback类的对象作为参数。这减少了显式调用notifyDataSetChanged等notifyDataSetRemoved方法的痛苦。此回调将以最佳方式检查新旧列表。所以让我们给它一个Companion object

android RecyclerView 设置header android recyclerview动态添加item_List_15

  • 第一种方法areContentsTheSame()用于检查两个项目是否具有相同的数据
  • 另一种方法areItemsTheSame()用于检查两个对象是否具有相同的项目。

android RecyclerView 设置header android recyclerview动态添加item_数据_16


如您所见,areContentsTheSame检查卷号,因为它是唯一的。第二个检查对象等价性。

ListAdapter 实现完成,所有设置都让 Warp 完成。

设置:RecyclerView_Adapter

  1. 参考 RecyclerView
val recyclerView = findViewById<RecyclerView>(R.id.recyclerView)
  1. 设置布局管理器
recyclerView .layoutManager = LinearLayoutManager(this)
  1. 获取数据(来自本地或互联网)

好吧,我的数据源是:

private fun dummyData(): List<StudentModel> {
       val list : ArrayList<StudentModel> = ArrayList()
       for(i in 1..20){
           list.add(StudentModel("Android", i))
       }
       return list
   }
  1. 创建一个对象StudentAdapter并将其设置为recyclerView
val adapter =  StudentAdapter()
   recyclerView.adapter = adapter

向适配器提交数据列表,以便它可以开始工作😉

adapter.submitList(data)
  1. 最后结果

[我删除了项目背景颜色,通常看起来更好]

android RecyclerView 设置header android recyclerview动态添加item_List_17