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提供子视图,同时适配器也提供提供为子视图注入数据。