Android常见结构控件(四)

打印 上一主题 下一主题

主题 810|帖子 810|积分 2430



目次

前言
RecyclerView控件
数据适配器
结构管理器
使用RecyclerView
创建XML结构文件
创建ReActivity类
创建数据适配器
onCreateViewHolder
onBindViewHolder
 完整代码
补充知识
ItemDecoration


前言

在前一篇中,我们讲解了ListView控件,那么本篇我们就来讲解RecyclerView控件
RecyclerView控件

与ListView类似,RecyclerView控件同样也是以列表的形式将数据进行展示,都是为了维护少量的View来进行显示大量的数据。是在android5.0之后新添的控件,用来替代传统的ListView和GridView控件的。
与传统的ListView不同,RecyclerView能通过LayoutManager类来实现横向或者竖向的列表效果、瀑布流效果和GridView效果,而ListView只能实现竖直的列表效果。

格式如下:
  1.     <androidx.recyclerview.widget.RecyclerView
  2.         android:layout_width="match_parent"
  3.         android:layout_height="match_parent"/>
复制代码
我们 可以通过在Patale中找到RecylcerView,将其拉到XML文件中

当然,我们也可以手动添加:


数据适配器

RecyclerView控件使用的是RecyclerView.Adapter,该数据适配器将BaseAdapter中的getView()方法拆解为onCreateViewHolder()方法和onBindViewHolder()方法,强制使用ViewHolder类,使代码更加规范化。
结构管理器

LayoutManager结构管理器用来设置每一项view在RecyclerView中的位置结构,以及控件item view的显示或隐藏。当View重用或者回收的时候,LayoutManager都会向Adapter来请求新的数据进行替换原来的数据的内容。这种回收复用机制可以提供性能,克制创建许多的view或者是频仍的调用findViewById()方法。
RcyclerView提供了三种内置的LayoutManager:


  • LinearLayoutManager:线性结构,横向或者纵向滑动列表
  • GridLayoutManager:网格结构
  • StaggerdGridLayoutManager:流式结构,如瀑布流效果。
当然,我们也可以通过继续RecyclerView.LayoutManager来实现一个自界说的LayoutManager。
Animations(动画)效果:


  • RecyclerView对于Item的添加和删除是默认开启动画的,我们也可以通过RecyclerView.ItemAnimator类来定制动画,再通过RecyclerView.setItemAnimator()方法来使用
以下是RecyclerView的一些相关类:
类名阐明
RecyclerView.Adapter可以托管数据集合,为每一项Item创建视图并且绑定数据
RecyclerView.ViewHolder承载Item视图的子结构
RecyclerView.LayoutManager负责Item视图的结构的显示管理
RecyclerView.ItemDecoration给每一项Item视图添加子View,例如进行画分割线等
RecyclerView.ItemAnimator负责处理数据添加或者删除时候的动画效果
使用RecyclerView

创建XML结构文件

这里我选择创建一个名为recycle_list.xml的结构文件。
这里我们选择模仿聊天的界面,那么起首我们需要实现一个聊天的界面,就在上面创建的结构中实现。效果图如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="wrap_content"
  5.     android:layout_margin="16dp">
  6.     <ImageView
  7.         android:id="@+id/tv"
  8.         android:src="@mipmap/ic_launcher"
  9.         android:layout_width="wrap_content"
  10.         android:layout_height="wrap_content"/>
  11.     <LinearLayout
  12.         android:layout_width="200dp"
  13.         android:layout_height="match_parent"
  14.         android:layout_marginLeft="10dp"
  15.         android:orientation="vertical">
  16.         <TextView
  17.             android:id="@+id/tv_name"
  18.             android:text="李四"
  19.             android:textStyle="bold"
  20.             android:textSize="20sp"
  21.             android:layout_width="wrap_content"
  22.             android:layout_height="wrap_content"/>
  23.         <TextView
  24.             android:id="@+id/news"
  25.             android:text="李四,你今天在干嘛呢?"
  26.             android:textSize="15sp"
  27.             android:layout_marginTop="15sp"
  28.             android:layout_width="match_parent"
  29.             android:layout_height="wrap_content"/>
  30.     </LinearLayout>
  31.     <TextView
  32.         android:id="@+id/tv_time"
  33.         android:gravity="end"
  34.         android:text="24/8/25\n12:00"
  35.         android:textColor="#999999"
  36.         android:textSize="15sp"
  37.         android:layout_width="wrap_content"
  38.         android:layout_weight="1"
  39.         android:layout_height="match_parent"/>
  40. </LinearLayout>
复制代码
同时,我们可以创建一个recycle_main.xml结构用来显示聊天界面,在其中放入RecyclerView控件。
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="match_parent">
  5.    
  6.     <androidx.recyclerview.widget.RecyclerView
  7.         android:id="@+id/recyclerView"
  8.         android:layout_width="match_parent"
  9.         android:layout_height="match_parent"/>
  10. </LinearLayout>
复制代码
创建ReActivity类

我们既然已经把结构文件做好,那么现在就是有关java的代码了,我们需要创建一个ReActivity类,在里面来进行绑定结构文件等操作。
  1. import android.os.Bundle;
  2. import androidx.annotation.Nullable;
  3. import androidx.appcompat.app.AppCompatActivity;
  4. import androidx.recyclerview.widget.RecyclerView;
  5. public class ReActivity extends AppCompatActivity {
  6.     private RecyclerView recyclerView;
  7.     @Override
  8.     protected void onCreate(@Nullable Bundle savedInstanceState) {
  9.         super.onCreate(savedInstanceState);
  10.         setContentView(R.layout.recycle_main);
  11.         Init();
  12.     }
  13.     private void Init() {
  14.         recyclerView = findViewById(R.id.recyclerView);//初始化recyclerView
  15.     }
  16. }
复制代码
创建数据适配器

在上面,我们已经把聊天的界面以及RecyclerView控件创建出来了,那么接下来我们就来自界说一个适配器继续RecyclerView.Adapter来创建item view以及绑定数据.
onCreateViewHolder

步调:


  • 创建适配器类继续RecyclerView.Adapter,传入泛型
  • 创建内部类即RecyclerView.ViewHolder的子类,并初始化item控件。
  • 重写RecyclerView.Adapter类的相关方法。
这里我们使用View.inflate来加载v,并将v传给内部类MyAdapter(本身实现)继续实例化。
  1.         private View v;
  2.         private MyAdapter myAdapter;
  3.         @NonNull
  4.         @Override
  5.         public MyAdapter onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
  6.             v = View.inflate(ReActivity.this,R.layout.recycle_list,null);
  7.             myAdapter = new MyAdapter(v);
  8.             return myAdapter;
  9.         }
复制代码
这里创建一个内部类MyAdapter继续ViewHolder,绑定传进来的v的控件。
  1. class MyAdapter extends RecyclerView.ViewHolder {
  2.             TextView name, news, time;
  3.             ImageView image;
  4.             public MyAdapter(@NonNull View itemView) {
  5.                 super(itemView);
  6.                 name = itemView.findViewById(R.id.tv_name);
  7.                 news = itemView.findViewById(R.id.news);
  8.                 time = itemView.findViewById(R.id.tv_time);
  9.             }
  10.         }
复制代码
onBindViewHolder



  • 将获取到的数据设置到对应的控件上。
  • 传入类的holder和position
position相当于下标,既然需要获取类的数据,那么我们需要一个构造方法来初始化类的数据
  1.         private final Context context;
  2.         private final ArrayList nameList,timeList,newsList;
  3.         public Adapter(Context context, ArrayList nameList, ArrayList newsList, ArrayList timeList){
  4.             this.context = context;
  5.             this.nameList = nameList;
  6.             this.newsList = newsList;
  7.             this.timeList = timeList;
  8.         }
复制代码
到这,我们已经把自界说的适配器Adapter实现完成,完整代码:
  1. /**
  2.      * RecyclerView的适配器类
  3.      */
  4.     class Adapter extends RecyclerView.Adapter<Adapter.MyAdapter> {
  5.         private Context context;
  6.         private ArrayList nameList, newsList, timeList;
  7.         /**
  8.          * Adapter构造方法
  9.          * @param context 上下文环境,此处为ReActivity实例
  10.          * @param nameList 名称数据列表
  11.          * @param newsList 消息数据列表
  12.          * @param timeList 时间数据列表
  13.          */
  14.         public Adapter(Context context, ArrayList nameList, ArrayList newsList, ArrayList timeList){
  15.             this.context = context;
  16.             this.nameList = nameList;
  17.             this.newsList = newsList;
  18.             this.timeList = timeList;
  19.         }
  20.         /**
  21.          * 创建ViewHolder
  22.          * @param parent 父容器,用于容纳RecyclerView项视图
  23.          * @param viewType 视图类型,此处未使用
  24.          * @return 创建的ViewHolder实例
  25.          */
  26.         @NonNull
  27.         @Override
  28.         public MyAdapter onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
  29.             View v = View.inflate(ReActivity.this,R.layout.recycle_list,null); // 加载RecyclerView项布局文件
  30.             MyAdapter myAdapter = new MyAdapter(v); // 创建ViewHolder
  31.             return myAdapter;
  32.         }
  33.         /**
  34.          * 绑定ViewHolder数据
  35.          * @param holder ViewHolder实例,用于展示数据
  36.          * @param position 数据源中的位置
  37.          */
  38.         @Override
  39.         public void onBindViewHolder(@NonNull MyAdapter holder, int position) {
  40.             holder.name.setText(nameList.get(position).toString()); // 设置名称文本
  41.             holder.news.setText(newsList.get(position).toString()); // 设置消息文本
  42.             holder.time.setText(timeList.get(position).toString()); // 设置时间文本
  43.         }
  44.         /**
  45.          * 返回数据源中项的数量
  46.          * @return 数据源大小
  47.          */
  48.         @Override
  49.         public int getItemCount() {
  50.             return nameList.size();
  51.         }
  52.         /**
  53.          * RecyclerView ViewHolder子类
  54.          */
  55.         class MyAdapter extends RecyclerView.ViewHolder {
  56.             TextView name, news, time;
  57.             ImageView image;
  58.             /**
  59.              * MyAdapter构造方法,用于初始化ViewHolder中的视图组件
  60.              * @param itemView RecyclerView项的根视图
  61.              */
  62.             public MyAdapter(@NonNull View itemView) {
  63.                 super(itemView);
  64.                 name = itemView.findViewById(R.id.tv_name); // 初始化名称文本视图
  65.                 news = itemView.findViewById(R.id.news); // 初始化消息文本视图
  66.                 time = itemView.findViewById(R.id.tv_time); // 初始化时间文本视图
  67.             }
  68.         }
  69.     }
复制代码
接下来,我们就在我们界说的Init()方法中来实例化这些类以及调用相关的方法。


  • 起首实例化存储数据的三个ArrayList,分别存储用户名,信息,时间。并模仿天生一些数据。
  • 创建Adapter对象并将上面三个ArratList传入
  • 创建线性结构管理器,并给前面的rercyclerView设置结构为线性结构。
  • 给rercyclerView设置每一项的动画,并且设置分割线和适配器
  1. /**
  2.      * 初始化方法,用于初始化RecyclerView组件及适配器
  3.      */
  4.     private void Init() {
  5.         recyclerView = findViewById(R.id.recyclerView); // 初始化RecyclerView组件
  6.         // 初始化存储数据的ArrayList
  7.         ArrayList names = new ArrayList();
  8.         ArrayList newsList = new ArrayList();
  9.         ArrayList timeList = new ArrayList();
  10.         // 循环生成模拟数据
  11.         for(int i=0;i<50;i++){
  12.             names.add("00"+i);
  13.             newsList.add("你今天在干嘛呢?");
  14.             timeList.add("2020-01-01 \n15:"+i);
  15.         }
  16.         // 创建Adapter实例并传入数据源
  17.         Adapter adapter = new Adapter(this ,names,newsList,timeList);
  18.         // 创建LinearLayoutManager实例,用于管理RecyclerView的布局
  19.         LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
  20.         recyclerView.setLayoutManager(linearLayoutManager); // 设置RecyclerView的布局管理器
  21.         recyclerView.setItemAnimator(new DefaultItemAnimator()); // 设置RecyclerView的项动画
  22.         recyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL)); // 添加分割线装饰
  23.         recyclerView.setAdapter(adapter); // 设置RecyclerView的适配器
  24.     }
复制代码
 完整代码

ReActivity.java
  1. import android.content.Context;import android.os.Bundle;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.TextView;import androidx.annotation.NonNull;import androidx.annotation.Nullable;import androidx.appcompat.app.AppCompatActivity;import androidx.recyclerview.widget.DefaultItemAnimator;import androidx.recyclerview.widget.DividerItemDecoration;import androidx.recyclerview.widget.LinearLayoutManager;import androidx.recyclerview.widget.RecyclerView;import java.util.ArrayList;// ReActivity类继续自AppCompatActivity,用于展示RecyclerView实现的列表界面public class ReActivity extends AppCompatActivity {    // 声明RecyclerView对象    private RecyclerView recyclerView;    /**     * onCreate方法,在活动创建时调用     * @param savedInstanceState 大概存在的保存实例状态Bundle,此处为可空     */    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.recycle_main); // 设置活动的结构文件        Init(); // 初始化组件和数据    }    /**
  2.      * 初始化方法,用于初始化RecyclerView组件及适配器
  3.      */
  4.     private void Init() {
  5.         recyclerView = findViewById(R.id.recyclerView); // 初始化RecyclerView组件
  6.         // 初始化存储数据的ArrayList
  7.         ArrayList names = new ArrayList();
  8.         ArrayList newsList = new ArrayList();
  9.         ArrayList timeList = new ArrayList();
  10.         // 循环生成模拟数据
  11.         for(int i=0;i<50;i++){
  12.             names.add("00"+i);
  13.             newsList.add("你今天在干嘛呢?");
  14.             timeList.add("2020-01-01 \n15:"+i);
  15.         }
  16.         // 创建Adapter实例并传入数据源
  17.         Adapter adapter = new Adapter(this ,names,newsList,timeList);
  18.         // 创建LinearLayoutManager实例,用于管理RecyclerView的布局
  19.         LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
  20.         recyclerView.setLayoutManager(linearLayoutManager); // 设置RecyclerView的布局管理器
  21.         recyclerView.setItemAnimator(new DefaultItemAnimator()); // 设置RecyclerView的项动画
  22.         recyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL)); // 添加分割线装饰
  23.         recyclerView.setAdapter(adapter); // 设置RecyclerView的适配器
  24.     }    /**
  25.      * RecyclerView的适配器类
  26.      */
  27.     class Adapter extends RecyclerView.Adapter<Adapter.MyAdapter> {
  28.         private Context context;
  29.         private ArrayList nameList, newsList, timeList;
  30.         /**
  31.          * Adapter构造方法
  32.          * @param context 上下文环境,此处为ReActivity实例
  33.          * @param nameList 名称数据列表
  34.          * @param newsList 消息数据列表
  35.          * @param timeList 时间数据列表
  36.          */
  37.         public Adapter(Context context, ArrayList nameList, ArrayList newsList, ArrayList timeList){
  38.             this.context = context;
  39.             this.nameList = nameList;
  40.             this.newsList = newsList;
  41.             this.timeList = timeList;
  42.         }
  43.         /**
  44.          * 创建ViewHolder
  45.          * @param parent 父容器,用于容纳RecyclerView项视图
  46.          * @param viewType 视图类型,此处未使用
  47.          * @return 创建的ViewHolder实例
  48.          */
  49.         @NonNull
  50.         @Override
  51.         public MyAdapter onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
  52.             View v = View.inflate(ReActivity.this,R.layout.recycle_list,null); // 加载RecyclerView项布局文件
  53.             MyAdapter myAdapter = new MyAdapter(v); // 创建ViewHolder
  54.             return myAdapter;
  55.         }
  56.         /**
  57.          * 绑定ViewHolder数据
  58.          * @param holder ViewHolder实例,用于展示数据
  59.          * @param position 数据源中的位置
  60.          */
  61.         @Override
  62.         public void onBindViewHolder(@NonNull MyAdapter holder, int position) {
  63.             holder.name.setText(nameList.get(position).toString()); // 设置名称文本
  64.             holder.news.setText(newsList.get(position).toString()); // 设置消息文本
  65.             holder.time.setText(timeList.get(position).toString()); // 设置时间文本
  66.         }
  67.         /**
  68.          * 返回数据源中项的数量
  69.          * @return 数据源大小
  70.          */
  71.         @Override
  72.         public int getItemCount() {
  73.             return nameList.size();
  74.         }
  75.         /**
  76.          * RecyclerView ViewHolder子类
  77.          */
  78.         class MyAdapter extends RecyclerView.ViewHolder {
  79.             TextView name, news, time;
  80.             ImageView image;
  81.             /**
  82.              * MyAdapter构造方法,用于初始化ViewHolder中的视图组件
  83.              * @param itemView RecyclerView项的根视图
  84.              */
  85.             public MyAdapter(@NonNull View itemView) {
  86.                 super(itemView);
  87.                 name = itemView.findViewById(R.id.tv_name); // 初始化名称文本视图
  88.                 news = itemView.findViewById(R.id.news); // 初始化消息文本视图
  89.                 time = itemView.findViewById(R.id.tv_time); // 初始化时间文本视图
  90.             }
  91.         }
  92.     }}
复制代码
结合前面的两个XML结构,运行即可得到:

补充知识

ItemDecoration

在使用RecyclerView的时候,如果我们想要设置分割线,那么我们可以通过ItemDecoration。例如:
  1.         DividerItemDecoration decoration = new DividerItemDecoration(this,DividerItemDecoration.VERTICAL);分割线
  2.         recyclerView.addItemDecoration(decoration); // 添加分割线装饰
复制代码
 

Item动画
在RecyclerView中提供了默认的IntemAnimator实现类: DefaulttemAnimator。我们可以借助该类帮我们实现一些动画。
  1.         DefaultItemAnimator animator = new DefaultItemAnimator();
  2.         animator.setAddDuration(1000);
  3.         animator.setRemoveDuration(1000);
  4.         recyclerView.setItemAnimator(animator); // 设置RecyclerView的项动画
复制代码
在前面的基础上,在recycle_main.xml聊天界面的上部添加两个按钮(添加和删除)
  1. <LinearLayout
  2.         android:layout_marginLeft="80dp"
  3.         android:layout_width="match_parent"
  4.         android:layout_height="wrap_content"
  5.         android:orientation="horizontal">
  6.         <Button
  7.             android:id="@+id/add"
  8.             android:text="添加Item"
  9.             android:layout_width="wrap_content"
  10.             android:layout_height="wrap_content" />
  11.         <Button
  12.             android:id="@+id/del"
  13.             android:text="删除Item"
  14.             android:layout_marginLeft="60dp"
  15.             android:layout_width="wrap_content"
  16.             android:layout_height="wrap_content"/>
  17.     </LinearLayout>
复制代码
同时在ReActivity类中添加对应点击变乱(由于代码有改动,以是这里直接放全部代码):
  1. package com.example.newapptext1;import android.content.Context;import android.os.Bundle;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.TextView;import androidx.annotation.NonNull;import androidx.annotation.Nullable;import androidx.appcompat.app.AppCompatActivity;import androidx.recyclerview.widget.DefaultItemAnimator;import androidx.recyclerview.widget.DividerItemDecoration;import androidx.recyclerview.widget.LinearLayoutManager;import androidx.recyclerview.widget.RecyclerView;import java.util.ArrayList;// ReActivity类继续自AppCompatActivity,用于展示RecyclerView实现的列表界面public class ReActivity extends AppCompatActivity implements View.OnClickListener {    // 声明RecyclerView对象    private RecyclerView recyclerView;    private Adapter adapter;    private ArrayList names;    private ArrayList newsList;    private ArrayList timeList;    /**     * onCreate方法,在活动创建时调用     * @param savedInstanceState 大概存在的保存实例状态Bundle,此处为可空     */    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.recycle_main); // 设置活动的结构文件        Init(); // 初始化组件和数据    }    /**     * 初始化方法,用于初始化RecyclerView组件及适配器     */    private void Init() {        recyclerView = findViewById(R.id.recyclerView); // 初始化RecyclerView组件        // 初始化存储数据的ArrayList        names = new ArrayList();        newsList = new ArrayList();        timeList = new ArrayList();        // 循环天生模仿数据        for(int i=0;i<5;i++){            names.add("00"+i);            newsList.add("你今天在干嘛呢?");            timeList.add("2020-01-01 \n15:"+i);        }        // 创建Adapter实例并传入数据源        adapter = new Adapter(this , names, newsList, timeList);        // 创建LinearLayoutManager实例,用于管理RecyclerView的结构        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); // 设置垂直方向        recyclerView.setLayoutManager(linearLayoutManager); // 设置RecyclerView的结构管理器        DefaultItemAnimator animator = new DefaultItemAnimator();
  2.         animator.setAddDuration(1000);
  3.         animator.setRemoveDuration(1000);
  4.         recyclerView.setItemAnimator(animator); // 设置RecyclerView的项动画        DividerItemDecoration decoration = new DividerItemDecoration(this,DividerItemDecoration.VERTICAL);分割线
  5.         recyclerView.addItemDecoration(decoration); // 添加分割线装饰        recyclerView.setAdapter(adapter); // 设置RecyclerView的适配器        //添加点击变乱        findViewById(R.id.add).setOnClickListener(this);        findViewById(R.id.del).setOnClickListener(this);    }    @Override    public void onClick(View view) {        // 判断点击的视图是否为添加按钮        if(view.getId()==R.id.add){            // 向列表中添加新的名字和消息,用于模仿新消息的到来            names.add(1,"新添");            newsList.add(1,"你在干嘛呢?");            timeList.add(1,"2020-01-01 \n15:00");            // 通知适配器插入新项,以便更新UI            adapter.notifyItemInserted(1);        } else if(view.getId()==R.id.del){            // 判断点击的视图是否为删除按钮            // 从名字、消息和时间列表中移除指定位置的元素,以模仿数据删除操作            names.remove(1);            newsList.remove(1);            timeList.remove(1);            // 通知适配器移除项,以便更新UI            adapter.notifyItemRemoved(1);        }    }    /**
  6.      * RecyclerView的适配器类
  7.      */
  8.     class Adapter extends RecyclerView.Adapter<Adapter.MyAdapter> {
  9.         private Context context;
  10.         private ArrayList nameList, newsList, timeList;
  11.         /**
  12.          * Adapter构造方法
  13.          * @param context 上下文环境,此处为ReActivity实例
  14.          * @param nameList 名称数据列表
  15.          * @param newsList 消息数据列表
  16.          * @param timeList 时间数据列表
  17.          */
  18.         public Adapter(Context context, ArrayList nameList, ArrayList newsList, ArrayList timeList){
  19.             this.context = context;
  20.             this.nameList = nameList;
  21.             this.newsList = newsList;
  22.             this.timeList = timeList;
  23.         }
  24.         /**
  25.          * 创建ViewHolder
  26.          * @param parent 父容器,用于容纳RecyclerView项视图
  27.          * @param viewType 视图类型,此处未使用
  28.          * @return 创建的ViewHolder实例
  29.          */
  30.         @NonNull
  31.         @Override
  32.         public MyAdapter onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
  33.             View v = View.inflate(ReActivity.this,R.layout.recycle_list,null); // 加载RecyclerView项布局文件
  34.             MyAdapter myAdapter = new MyAdapter(v); // 创建ViewHolder
  35.             return myAdapter;
  36.         }
  37.         /**
  38.          * 绑定ViewHolder数据
  39.          * @param holder ViewHolder实例,用于展示数据
  40.          * @param position 数据源中的位置
  41.          */
  42.         @Override
  43.         public void onBindViewHolder(@NonNull MyAdapter holder, int position) {
  44.             holder.name.setText(nameList.get(position).toString()); // 设置名称文本
  45.             holder.news.setText(newsList.get(position).toString()); // 设置消息文本
  46.             holder.time.setText(timeList.get(position).toString()); // 设置时间文本
  47.         }
  48.         /**
  49.          * 返回数据源中项的数量
  50.          * @return 数据源大小
  51.          */
  52.         @Override
  53.         public int getItemCount() {
  54.             return nameList.size();
  55.         }
  56.         /**
  57.          * RecyclerView ViewHolder子类
  58.          */
  59.         class MyAdapter extends RecyclerView.ViewHolder {
  60.             TextView name, news, time;
  61.             ImageView image;
  62.             /**
  63.              * MyAdapter构造方法,用于初始化ViewHolder中的视图组件
  64.              * @param itemView RecyclerView项的根视图
  65.              */
  66.             public MyAdapter(@NonNull View itemView) {
  67.                 super(itemView);
  68.                 name = itemView.findViewById(R.id.tv_name); // 初始化名称文本视图
  69.                 news = itemView.findViewById(R.id.news); // 初始化消息文本视图
  70.                 time = itemView.findViewById(R.id.tv_time); // 初始化时间文本视图
  71.             }
  72.         }
  73.     }}
复制代码
运行之后可以得到:

当然,尚有个革新功能,后面再跟各人讲。

以上就是本篇所有内容,如有不敷,欢迎指正~ 


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曂沅仴駦

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表