• Android --- RecycleView


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

    使用 RecyclerView 步骤

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

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. xmlns:app="http://schemas.android.com/apk/res-auto"
    4. xmlns:tools="http://schemas.android.com/tools"
    5. android:layout_width="match_parent"
    6. android:layout_height="match_parent"
    7. tools:context=".MyRecycleView">
    8. <TextView
    9. android:id="@+id/textView7"
    10. android:layout_width="match_parent"
    11. android:layout_height="wrap_content"
    12. android:text="RecycleView"
    13. android:textAlignment="center"
    14. android:textColor="@color/design_default_color_primary_dark"
    15. android:textSize="20sp"
    16. app:layout_constraintEnd_toEndOf="@+id/recycleView"
    17. app:layout_constraintStart_toStartOf="parent"
    18. app:layout_constraintTop_toTopOf="parent" />
    19. <androidx.recyclerview.widget.RecyclerView
    20. android:id="@+id/recycleView"
    21. android:layout_width="match_parent"
    22. android:layout_height="wrap_content"
    23. app:layout_constraintBottom_toBottomOf="parent"
    24. app:layout_constraintEnd_toEndOf="parent"
    25. app:layout_constraintStart_toStartOf="parent"
    26. app:layout_constraintTop_toBottomOf="@+id/textView7"
    27. app:layout_constraintVertical_bias="0.0" />
    28. </androidx.constraintlayout.widget.ConstraintLayout>

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

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

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

    都是通过setLayoutManager方法来设置

    1. public class MyRecycleView extends AppCompatActivity {
    2. private RecyclerView recyclerView;
    3. @Override
    4. protected void onCreate(Bundle savedInstanceState) {
    5. super.onCreate(savedInstanceState);
    6. setContentView(R.layout.activity_my_recycle_view);
    7. // 设置布局
    8. LinearLayout linearLayout = new LinearLayout(this);
    9. recyclerView = findViewById(R.id.recycleView);
    10. LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
    11. recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
    12. }
    13. }
    • 准备数据项item的布局

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

    recycle_view_item.xml

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <!-- 创建item布局-->
    3. <androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    4. xmlns:app="http://schemas.android.com/apk/res-auto"
    5. android:layout_width="match_parent"
    6. android:layout_height="wrap_content"
    7. android:layout_margin="8dp"
    8. app:cardCornerRadius="20dp"
    9. app:cardElevation="3dp">
    10. <LinearLayout
    11. android:id="@+id/linearLayout1111"
    12. android:layout_width="match_parent"
    13. android:layout_height="match_parent"
    14. android:background="@color/black"
    15. android:orientation="vertical">
    16. <TextView
    17. android:id="@+id/hourTxt"
    18. android:textColor="@color/white"
    19. android:textSize="14sp"
    20. android:textAlignment="center"
    21. android:layout_margin="8dp"
    22. android:layout_width="match_parent"
    23. android:layout_height="wrap_content"
    24. android:text="TextView" />
    25. <TextView
    26. android:id="@+id/tempTxt"
    27. android:layout_width="match_parent"
    28. android:layout_height="wrap_content"
    29. android:text="20"
    30. android:textSize="18sp"
    31. android:textColor="@color/white"
    32. android:textAlignment="center"/>
    33. </LinearLayout>
    34. </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的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长度

    1. package com.example.androidstudiostudy;
    2. import android.graphics.Color;
    3. import android.view.LayoutInflater;
    4. import android.view.View;
    5. import android.view.ViewGroup;
    6. import android.widget.LinearLayout;
    7. import androidx.annotation.NonNull;
    8. import androidx.recyclerview.widget.RecyclerView;
    9. // 创建 RecyclerView适配器
    10. /* 1. 新建一个类继承 RecyclerView.Adapter的Adapter类(VH是ViewHolder的类名) ---- MyRecycleViewAdapter
    11. * 2. 创建ViewHolder:在Adapter中创建一个继承RecyclerView.ViewHolder的静态内部类,记为VH。ViewHolder的实现和ListView的ViewHolder实现几乎一样(为了减少每一个item布局找控件的时间)
    12. * 3. 在 Adapter中实现3个方法:
    13. * onCreateViewHolder() 为每个Item inflater出一个View,View直接封装在ViewHolder中,每一个item布局里的控件就在ViewHolder中找到
    14. * onBindViewHolder() 这个方法主要用于适配渲染数据到View中->item View中
    15. * getItemCount() 获取item长度
    16. * 可以看出,RecyclerView将ListView中getView()的功能拆分成了onCreateViewHolder()和onBindViewHolder()。*/
    17. public class MyRecycleViewAdapter extends RecyclerView.Adapter {
    18. // 创建静态类 ViewHolder
    19. // 可以视为 onCreate 方法,在这里获取行布局中的所有控件
    20. public static class ViewHolder extends RecyclerView.ViewHolder{
    21. private Color color;
    22. private LinearLayout linearLayout;
    23. public ViewHolder(@NonNull View itemView) {
    24. super(itemView);
    25. linearLayout = itemView.findViewById(R.id.linearLayout1111);
    26. }
    27. }
    28. private final int[] colors;
    29. // 构造函数 获取数据
    30. public MyRecycleViewAdapter(int[] colors) {
    31. this.colors = colors;
    32. }
    33. @NonNull
    34. @Override
    35. //膨胀布局 为每一行提供外观的地方
    36. public MyRecycleViewAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    37. View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycle_view_itemt,parent,false);
    38. return new ViewHolder(view);
    39. }
    40. @Override
    41. // 将每一行的数据值和每一行的布局进行绑定
    42. public void onBindViewHolder(@NonNull MyRecycleViewAdapter.ViewHolder holder,int position) {
    43. holder.linearLayout.setBackgroundColor(colors[position]);
    44. holder.itemView.setOnClickListener(v -> System.out.print("点击了颜色:"));
    45. }
    46. @Override
    47. public int getItemCount() {
    48. return colors.length;
    49. }
    50. }

  • 相关阅读:
    froeach迭代删除和List迭代删除问题
    Matlab论文插图绘制模板第46期—帕累托图(Pareto)
    android5.1 launcher2去掉桌面应用图标
    BLE学习(4):蓝牙地址类型和设备的隐私
    主从复制的实现方案
    FutureTask的测试使用和方法执行分析
    随机油漆 (SPO)优化算法(Matlab代码实现)
    对象的比较(上)PriorityQueue中的底层源码解析
    图片操作笔记-滤波-python
    MySQL高级语句运用
  • 原文地址:https://blog.csdn.net/weixin_43244083/article/details/138186848