Android 三步创建RecycleView

2,891 阅读2分钟

RecyclerView是Android官方扩展组件,是用来在有限窗体内展示大量的数据,如展示普通列表,网格列表。

RecyclerView可以自动处理列表中每一项视图复用的问题,使用的时候不用担心重复使用的问题。RecyclerView功能强大,使用也比Android原生组件ListView简单的多,强烈推荐使用。

在使用RecyclerView前,我们需要在项目中增加RecyclerView的依赖,最新的androidx已经支持了RecyclerView,所以我们直接使用androidx提供库:

dependencies {
    ...
    implementation 'androidx.recyclerview:recyclerview:1.0.0'
    ...
}

第一步,并在布局文件中添加RecyclerView组件

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

第二步,设置RecyclerView

首先我们在Activity或者Fragment中拿到RecyclerView对象

mRecycleView = view.findViewById(R.id.recycler_view);

然后设置展示方式,这里设置普通的竖向列表展示方式:

mRecycleView.setLayoutManager(new LinearLayoutManager(getContext()));

第三步,绑定Adapter

绑定Adapter的目的是,Adapter为RecycleView提供每一项展示的视图内容。创建Adapter前,我们需要先创建RecyclerView.ViewHolder, ViewHolder是用来保存列表中的子视图,我们在ViewHolder中会对子视图进行初步的解析,方便后面把数据注入到视图中。

private class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    private TextView mTitleView;
    private int mPosition;

    public MyViewHolder(@NonNull View itemView) {
        super(itemView);

        itemView.setOnClickListener(this);

        mTitleView = itemView.findViewById(R.id.title);
    }

    public void setPosition(int position) {
        this.mPosition = position;
    }

    public void setTitle(String title) {
        mTitleView.setText(title);
    }

    @Override
    public void onClick(View view) {
        Toast.makeText(getContext(), "click " + mPosition, Toast.LENGTH_SHORT).show();
    }
}

我在这里创建一个简单ViewHolder,在构造方法中,对视图(itemView)进行了初步的解析,把titleView取出来设置为属性,并对外提供setTitle方法,方便后面把title数据注入到TitleView中。还有另外做的一件事是,把Click事件也设置到itemView上面,这个实现就是列表中每一项的点击。

创建好ViewHolder以后,接下来创建Adapter

RecyclerView.Adapter<MyViewHolder> adapter = new RecyclerView.Adapter<MyViewHolder>() {
    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new MyViewHolder(LayoutInflater.from(getContext()).inflate(R.layout.item_dcs_event, parent, false));
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        holder.setTitle("#" + position);
        holder.setPosition(position);
    }

    @Override
    public int getItemCount() {
        return 100;
    }
};

这里我使用的是假数据。然后把Adapter设置到RecyclerView中:

mRecycleView.setAdapter(adapter);

至此RecycleView就可以使用了。

总结

总结一下,使用RecycleView的三个步骤,1添加依赖,在视图文件中配置RecycleView,2拿到RecycleView对象,并配置展示方式,3设置适配器,适配器为RecycleView提供子视图,同时适配器也提供提供为子视图注入数据。