RecyclerView(一)--基础使用

506 阅读2分钟

「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战

一、 简介

前段时间用到了RecyclerView,发现自己对它了解的只是皮毛,所以趁这次机会,对RecyclerView做一个深入总结。

RecyclerView是Google从Android 5.0推出的替代ListView的一个控件,官网上给出的解释是这样的:

A flexible view for providing a limited window into a large data set.

RecyclerView出现,代替了很多控件库,它可以实现纵向/横向ListView,GridView, 瀑布流控件等等,而且实现起来非常简单,只需要更改LayoutManager(纵向/横向ListView通过LinearLayoutManager实现,GridView是GridLayoutManager,瀑布流对应StaggeredGridLayoutManager)。

二、优点

(1) 支持各种列表显示,实现起来非常简单 (2) 实现View的复用和回收,规范了viewholder的使用 (3) 可以局部刷新 (4) 能够实现item的拖拽和侧滑

三、使用

这一篇主要是RecyclerView简单使用

1. 导入RecyclerView包

implementation "androidx.recyclerview:recyclerview:1.2.1"
// For control over item selection of both touch and mouse driven selection
implementation "androidx.recyclerview:recyclerview-selection:1.1.0"

2. 在布局中引入RecyclerView类

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

3. Activity初始化

在Activity中初始化RecyclerView,设置LayoutManager和Adapter

recyclerView=findViewById(R.id.id_recyclerview);
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);
adapter=new RecyclerViewAdapter(this,listBean);
recyclerView.setAdapter(adapter);
adapter.setOnRecyclerViewListener(new RecyclerViewAdapter.onRecyclerViewListener() {
    @Override
    public void onClick(int position) {
        Snackbar.make(recyclerView,"点击了"+listBean.get(position),Snackbar.LENGTH_SHORT).show();;
    }
});

4. Adapter

这一步是比较重要的,自定义一个Adapter,用来展示数据,具体方法的作用:

  • onCreateViewHolder:创建一个ViewHolder

  • onBindViewHolder:绑定ViewHolder

  • getItemCount():获取item的数量

  • getItemViewType():可以实现定义多个不同类型的布局

    具体的实现方法:

    (1) 重写getItemViewType()方法,根据需求规则给出不同的type值。

    (2) 在onBindViewHolder()里面根据不同holder的类型来赋予相对于的数据

5. Item的点击实现

我们实现一个列表,不仅仅要展示内容,还需要点击跳转,但是在RecyclerView中,没有像ListView.setOnItemClickListener()这样的的监听接口。那怎么实现点击事件呢?我们可以在Adapter中添加监听事件的接口

6. 简单的Adapter实现

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> implements View.OnClickListener {

    private Context mContext;
    private List<Bean> mLists;
    private onRecyclerViewListener mOnRecyclerViewListener;

    public RecyclerViewAdapter(Context context, List<Bean> list) {
        mContext=context;
        mLists = list;
    }

    @NonNull
    @NotNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull @NotNull ViewGroup parent, int viewType) {
        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_item,parent,false);
        ViewHolder viewHolder=new ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull @NotNull ViewHolder holder, int position) {
        Bean bean=mLists.get(position);
        holder.textView.setText(bean.getName());
        holder.textView.setOnClickListener(this);
    }

    @Override
    public int getItemCount() {
        return mLists==null?0:mLists.size();
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.id_text:
                int position = (int) view.getTag();
                mOnRecyclerViewListener.onClick(position);
                break;
            default:
                break;
        }
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {

        TextView textView;
        public ViewHolder(@NonNull @NotNull View itemView) {
            super(itemView);
            textView=itemView.findViewById(R.id.id_text);
        }
    }

    public void setOnRecyclerViewListener(onRecyclerViewListener onRecyclerViewListener){
        this.mOnRecyclerViewListener=onRecyclerViewListener;
    }

    interface onRecyclerViewListener{
        void onClick(int position);
    }

}

这篇主要是初识RecyclerView,简介介绍一下Recycler的优缺点以及使用,下一篇介绍分割线和动画