目录
一 . 介绍及基本用法
二. 点击事件及分割线
三 . 增加及删减item
一 . 介绍及基本用法
RecyclerView 是一个强大的滚动控件,应用场景广泛。像消息列表,微博信息等场景大多使用RecyclerView。它具有高度的
解耦,异常的灵活性和更高的效率,逐渐替换掉ListView和GridView。
基本用法:
使用前先在 app/build.gradle 文件 dependencies闭包中添加依赖(版本可能不同):
implementation 'com.android.support:recyclerview-v7:26.1.0'
在布局文件中添加 RecyclerView 控件,以及自定义item的布局文件(这里我们在其中放置一个TextView)后,需要为我们的 RecyclerView自定义一个适配器。
如图,适配器继承 RecyclerView.Adapter<>,并将泛型指定为 适配器的内部类ViewHolder(继承RecyclerView.ViewHolder)。
接着根据我们自定义的item重写图中3个方法及内部类。
· RecyclerView.ViewHolder : 生成子项item布局,通过findViewById()可获取布局中控件实例。
· onCreateViewHolder : 用于创建 ViewHolder 实例(其中R.layout.item为自定义item布局)
·onBindViewHolder : 将视图与数据进行绑定。数据从适配器构造函数传入。
其中泛型item为数据的实体类,根据不同数据创建。
· getItemCount : 用于告诉RecyclerView一共有多少子项。直接返回数据源长度。
然后在活动中创建RecyclerView实例并设置布局方式,创建适配器并传入RecyclerView中。
List<item> items=new ArrayList<>();
其中LinearLayoutManager表示item是线性排列的,默认是垂直排列,如果想设置成水平排列,可添加以下代码:
layoutManger.setOriention(LinearLayoutManger.HORIZONTAL);
也可以设置其他布局方式: GirdLayoutManager可以实现网格布局(第二个参数为列数)
GridLayoutManager layoutManager=new GridLayoutManager(this,3);
StaggeredGirdLayoutManager可以实现瀑布流
StaggeredGirdLayoutManager layoutManager=newStaggeredGirdLayoutManager(3,StaggeredGirdLayoutManager.VERTICAL);
第一个参数指定布局的列数,第二个参数指定排列方向。
二. 点击事件及分割线
1. 点击事件
RecyclerView中item的点击事件需要我们定义。可在onCreateViewHolder里编写:
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent,int viewType){
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item,parent,false);
final ViewHolder holder = new Holder(view);
holder.textView.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
//编写点击逻辑
}
});
}
也可以在适配器中定义接口提供回调。
首先先实现点击接口:
implements View.OnLongClickListener, View.OnClickListener
在适配器中定义接口,提供回调:
对item设置监听并回调给我们自定义的监听。先在onCreateViewHolder中添加如下代码:
view.setOnLongClickListener(this); view.setOnClickListener(this);
在onBindViewHolder添加如下代码 :
holder.itemView.setTag(position);
重写onClick(),onLongClick()方法:
最后在活动中监听:
2.分割线
分割线也需要我们自定义,并通过 RecyclerView.addItemDecoration()加入分割线。
首先继承 RecyclerView.ItemDecoration,然后重写方法。
public void onDraw(Canvas c, RecyclerView parent, State state)
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, State state)
主要有以上方法。onDraw()方法是绘制分割线的,getItemOffsets()用于设置item的padding属性。
三 . 增加及删减item
在适配器中添加如下代码:
其中notifyItemInserted()及notifyItemRemoved()会提醒RecyclerView刷新页面。