Android --- RecycleView

RecyclerView是官方在5.0之后新添加的控件,推出用来替代传统的ListViewGridView列表控件。

使用 RecyclerView 步骤

  • 在布局文件中定义的一个 RecyclerView 实例,用作视图的容器。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MyRecycleView">

    <TextView
        android:id="@+id/textView7"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="RecycleView"
        android:textAlignment="center"
        android:textColor="@color/design_default_color_primary_dark"
        android:textSize="20sp"
        app:layout_constraintEnd_toEndOf="@+id/recycleView"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recycleView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView7"
        app:layout_constraintVertical_bias="0.0" />
</androidx.constraintlayout.widget.ConstraintLayout>
  • 布局管理器

布局管理器负责处理视图中界面组件的组织(布局)

RecyclerView提供了三种布局管理器即:

  • LinearLayoutManager 线性布局管理器
  • StaggeredGridLayoutManager 瀑布流布局管理器
  • GridLayoutManager 网格布局管理器

都是通过setLayoutManager方法来设置

public class MyRecycleView extends AppCompatActivity {

    private RecyclerView recyclerView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_recycle_view);
        // 设置布局
        LinearLayout linearLayout = new LinearLayout(this);
        recyclerView = findViewById(R.id.recycleView);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
      
    }
}
  • 准备数据项item的布局

如果所有列表项看起来都一样,您可以对所有这些列表项使用相同的布局,但这不是强制性要求。项布局必须与 fragment 的布局分开创建,以便一次创建一个项视图,并在其中填充数据。

recycle_view_item.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- 创建item布局-->
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="8dp"
    app:cardCornerRadius="20dp"
    app:cardElevation="3dp">

    <LinearLayout
        android:id="@+id/linearLayout1111"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/black"
        android:orientation="vertical">

        <TextView
            android:id="@+id/hourTxt"
            android:textColor="@color/white"
            android:textSize="14sp"
            android:textAlignment="center"
            android:layout_margin="8dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="TextView" />

        <TextView
            android:id="@+id/tempTxt"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="20"
            android:textSize="18sp"
            android:textColor="@color/white"
            android:textAlignment="center"/>
    </LinearLayout>
</androidx.cardview.widget.CardView>
  • 准备显示的数据。

int[] colors = {R.color.p1, R.color.p2, R.color.p3, R.color.p4, R.color.p5, R.color.p6};
  • 适配器

该适配器可将您的数据与 RecyclerView 相关联。它会调整数据,使其可在 ViewHolder 中显示。RecyclerView 会使用适配器确定如何在屏幕上显示数据。

新建一个类继承 RecyclerView.Adapter<VH>的Adapter类(VH是ViewHolder的类名) ---- MyRecycleViewAdapter

创建ViewHolder:在Adapter中创建一个继承RecyclerView.ViewHolder的静态内部类,记为VH。ViewHolder的实现和ListView的ViewHolder实现几乎一样(为了减少每一个item布局找控件的时间)

在 Adapter中实现3个方法:

onCreateViewHolder() 为每个Item inflate出一个View,View直接封装在ViewHolder中,每一个item布局里的控件就在ViewHolder中找到 

onBindViewHolder() 这个方法主要用于适配渲染数据到View中->item View中

getItemCount() 获取item长度

package com.example.androidstudiostudy;

import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

// 创建 RecyclerView适配器
/* 1. 新建一个类继承 RecyclerView.Adapter<VH>的Adapter类(VH是ViewHolder的类名) ---- MyRecycleViewAdapter
 * 2. 创建ViewHolder:在Adapter中创建一个继承RecyclerView.ViewHolder的静态内部类,记为VH。ViewHolder的实现和ListView的ViewHolder实现几乎一样(为了减少每一个item布局找控件的时间)
 * 3. 在 Adapter中实现3个方法:
 *    onCreateViewHolder() 为每个Item inflater出一个View,View直接封装在ViewHolder中,每一个item布局里的控件就在ViewHolder中找到
 *    onBindViewHolder() 这个方法主要用于适配渲染数据到View中->item View中
 *    getItemCount() 获取item长度
 * 可以看出,RecyclerView将ListView中getView()的功能拆分成了onCreateViewHolder()和onBindViewHolder()。*/


public class MyRecycleViewAdapter extends RecyclerView.Adapter<MyRecycleViewAdapter.ViewHolder> {
    // 创建静态类 ViewHolder
    // 可以视为 onCreate 方法,在这里获取行布局中的所有控件
    public static class ViewHolder extends RecyclerView.ViewHolder{
        private Color color;
        private LinearLayout linearLayout;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            linearLayout = itemView.findViewById(R.id.linearLayout1111);
        }
    }

    private final int[] colors;
    // 构造函数 获取数据
    public MyRecycleViewAdapter(int[] colors) {
        this.colors = colors;
    }

    @NonNull
    @Override
    //膨胀布局 为每一行提供外观的地方
    public MyRecycleViewAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycle_view_itemt,parent,false);
        return new ViewHolder(view);
    }

    @Override
    // 将每一行的数据值和每一行的布局进行绑定
    public void onBindViewHolder(@NonNull MyRecycleViewAdapter.ViewHolder holder,int position) {
        holder.linearLayout.setBackgroundColor(colors[position]);
        holder.itemView.setOnClickListener(v -> System.out.print("点击了颜色:"));
    }

    @Override
    public int getItemCount() {
        return colors.length;
    }


}

相关推荐

  1. Android --- RecycleView

    2024-04-26 06:54:06       17 阅读
  2. Android RecyclerView

    2024-04-26 06:54:06       11 阅读
  3. android recyclerView緩存數量 recycleview的缓存

    2024-04-26 06:54:06       7 阅读
  4. android recyclerview 总结

    2024-04-26 06:54:06       25 阅读
  5. Android RecyclerView使用

    2024-04-26 06:54:06       8 阅读
  6. AndroidRecyclerView自由拖动item

    2024-04-26 06:54:06       36 阅读
  7. Android基础-RecyclerView的优点

    2024-04-26 06:54:06       9 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-26 06:54:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-26 06:54:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-26 06:54:06       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-26 06:54:06       20 阅读

热门阅读

  1. 服务器之间传递数据脚本

    2024-04-26 06:54:06       17 阅读
  2. TensorFlow 的基本概念和使用场景

    2024-04-26 06:54:06       15 阅读
  3. Oracle expdp/impdp 及 exp/imp 命令详解

    2024-04-26 06:54:06       13 阅读
  4. Debian常用命令

    2024-04-26 06:54:06       10 阅读
  5. nodejs连接oracle批量更新数据测试

    2024-04-26 06:54:06       13 阅读
  6. Debian常用命令

    2024-04-26 06:54:06       16 阅读
  7. 一个网络空间安全的小游戏

    2024-04-26 06:54:06       13 阅读
  8. 蛋白质致病突变的计算方法(六)

    2024-04-26 06:54:06       15 阅读
  9. Recat学习

    2024-04-26 06:54:06       10 阅读