RecyclerView详解(一):简单使用介绍(kotlin)

RecyclerView是android5.0开始推出的一个列表类数据展示的组件,放在support-v7,所以5.0以下也同样可以使用。与经典的ListView相比,Recyclerview同样拥有item回收复用的功能,这一点从它的名字Recyclerview即回收view也可以看出。 其实RecyclerView并不是来替代listview的,两者使用场景不一样。如果是一些简单的列表展示,其实依旧用listview就可以了,而且很多方法都已经封装好。事实上,RecyclerView相对于listview并没有性能上的提升,只是提供了更多的可扩展的功能。

下面简单介绍几点:

  1. RecyclerView封装了viewholder的回收复用,即RecyclerView标准化了ViewHolder,编写Adapter面向的是ViewHolder而不再是View了,复用的逻辑被封装了,写起来更加简单。直接省去了listview中convertView.setTag(holder)和convertView.getTag()这些繁琐的步骤。
  2. 通过设置布局管理器可以控制Item的布局方式,横向、竖向以及瀑布流方式,LinearLayoutManager管理器可以实现于listview一样的展示效果,GridLayoutManager管理器可以实现GridView的效果。与瀑布流对应的是StaggeredGridLayoutManager的管理器。
  3. 可设置Item的间隔样式(可绘制),通过继承RecyclerView的ItemDecoration这个类,然后针对自己的业务需求去书写代码。
  4. 可以控制Item增删的动画,可以通过ItemAnimator这个类进行控制,当然针对增删的动画,RecyclerView有其自己默认的实现。 使用recycleview还有一点要注意,点击和长按事件都需要自己去实现。item之间的间隔样式也需要自己去定义。所以我说,如果是简单的列表展示,其实用listview或者gridview就可以了。毕竟有很多方法已经封装好了。不过如果你能对recycleview做统一的封装,那么当我没说。

基本使用

这里先做个简单的使用,首先是引入该类,如下

dependencies {  
   implementation 'androidx.recyclerview:recyclerview:1.1.0' 
} 

现在开始定义activity的布局文件activity_rv_linear.xml,加入Recyclerview,如下

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical"
   tools:context=".MainActivity">

   <include layout="@layout/item_head_layout" />

   <androidx.recyclerview.widget.RecyclerView
       android:id="@+id/rv_linear"
       android:layout_width="match_parent"
       android:layout_height="match_parent" />

</LinearLayout>

初始化recycleview

val linearLayoutManager = LinearLayoutManager(this)
rv_linear.layoutManager = linearLayoutManager
homeAdapter = HomeAdapter()
rv_linear.adapter = homeAdapter

LinearLayoutManager是线性布局管理器,这个管理器的显示样式跟listview的一模一样。 接下来看HomeAdapter的定义,是继承自 RecyclerView.Adapter的一个类

internal inner class HomeAdapter : RecyclerView.Adapter<HomeViewHolder?>() {

       override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HomeViewHolder {
           val itemView: View = LayoutInflater.from(this@LinearManagerActivity)
               .inflate(R.layout.item_rv_txt, parent, false)
           return HomeViewHolder(itemView)
       }

       override fun onBindViewHolder(holder: HomeViewHolder, position: Int) {
           holder.tv.text = mDatas[position]
       }


       internal inner class HomeViewHolder(view: View) :RecyclerView.ViewHolder(view) {
           var tv: TextView  = view.findViewById(R.id.txt)
       }

       override fun getItemCount(): Int {
           return mDatas.size
       }


   }

首先看HomeViewHolder,继承Recyclervier.ViewHolder,是Recyclervier标准化的ViewHolder,主要负责item的回收和复用。这里主要是初始化对应item里面的组件,方便用来填充数据。

Adapter的三个方法

onCreateViewHolder(): 主要负责创建ViewHolder,提供给onBindViewHolder的方法用来填充和操作数据。

onBindViewHolder(): 主要是对已经存在的ViewHolder进行数据操作。

getItemCount(): 返回item的数量,这个跟listview的一样。 上面的onCreateViewHolder和onBindViewHolder,其实就是规范了item的复用机制,这个在listview是要自己去实现的,所以这边只要负责创建和绑定,不用考虑复用的逻辑。明显方便了很多。 这里再贴出item的布局文件

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/txt"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:paddingTop="15dp"
  android:background="@color/red_ee4949"
  android:textColor="@color/white"
  android:paddingBottom="15dp"
  android:gravity="center"
  android:textSize="16sp" />

以上的代码运行后如下图
在这里插入图片描述

git地址:https://gitee.com/stonezry/AndroidDemo

欢迎关注本人公众号和小程序,谢谢
在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/stonezry/article/details/106099426