📜  recyclerview 库 (1)

📅  最后修改于: 2023-12-03 15:34:41.671000             🧑  作者: Mango

RecyclerView库介绍

简介

RecyclerView是Android官方推荐的一个更强大和灵活的视图容器,用于替换ListView和GridView。与ListView和GridView相比,它的性能更高,功能更加丰富,使用起来更加灵活。

特点
  1. 复用item视图,大大减少内存消耗,提高了UI渲染效率;
  2. 使用LayoutManager来排列和测量item视图,可以实现各种不同的布局效果;
  3. 提供了ItemDecoration、ItemAnimator等工具类,可以轻松实现增加、移除、刷新item等动态效果;
  4. 增加插拔式的Adapter,可以根据需求自定义Adapter和ViewHolder;
  5. 支持分页加载,滚动监听,自定义手势等。
用法
导入RecyclerView库

在build.gradle加入以下代码:

dependencies {
    implementation 'androidx.recyclerview:recyclerview:1.2.1'
}
添加RecyclerView控件

在XML布局文件中添加RecyclerView控件:

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

LayoutManager用于确定RecyclerView中的子视图应如何摆放。例如,LinearLayoutManager可使子视图在一行或一列中显示,而GridLayoutManager可使子视图以网格方式排列。以下是几种LayoutManager的示例:

  1. LinearLayoutManager:
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
  1. GridLayoutManager:
GridLayoutManager layoutManager = new GridLayoutManager(this, 2);
recyclerView.setLayoutManager(layoutManager);
设置Adapter

RecyclerView需要一个Adapter以提供数据。创建一个继承RecyclerView.Adapter的类,并实现以下三个方法:

public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        // 创建ViewHolder
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        // 绑定数据
    }

    @Override
    public int getItemCount() {
        // 返回item个数
    }
}

然后将Adapter设置到RecyclerView中:

MyAdapter adapter = new MyAdapter();
recyclerView.setAdapter(adapter);
设置ItemDecoration和ItemAnimator

如果需要为RecyclerView添加分割线、边框等效果,可以使用ItemDecoration:

recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));

如果需要为RecyclerView添加动画效果,可以使用ItemAnimator:

DefaultItemAnimator animator = new DefaultItemAnimator();
recyclerView.setItemAnimator(animator);
设置ItemClick事件监听

RecyclerView没有像ListView那样提供OnItemClickListener接口,需要自己实现。一个典型的解决方法是在Adapter中绑定View.OnClickListener:

public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {

    public interface OnItemClickListener {
        void onItemClick(int position);
    }

    private OnItemClickListener mListener;

    public void setOnItemClickListener(OnItemClickListener listener) {
        this.mListener = listener;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, final int position) {
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mListener != null) {
                    mListener.onItemClick(position);
                }
            }
        });
    }
}

然后在Activity或Fragment中设置OnItemClickListener:

adapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
    @Override
    public void onItemClick(int position) {
        // 处理item点击事件
    }
});
结语

RecyclerView是一个非常实用的控件,可以帮助我们快速构建高性能灵活的列表。当我们需要列表效果时,强烈建议使用RecyclerView。