目录

一 . 介绍及基本用法

二. 点击事件及分割线

三 . 增加及删减item

 

一 . 介绍及基本用法

  RecyclerView 是一个强大的滚动控件,应用场景广泛。像消息列表,微博信息等场景大多使用RecyclerView。它具有高度的

解耦,异常的灵活性和更高的效率,逐渐替换掉ListView和GridView。

  基本用法: 

  使用前先在 app/build.gradle 文件 dependencies闭包中添加依赖(版本可能不同):

implementation 'com.android.support:recyclerview-v7:26.1.0'

 在布局文件中添加 RecyclerView 控件,以及自定义item的布局文件(这里我们在其中放置一个TextView)后,需要为我们的  RecyclerView自定义一个适配器。

android recyclerview GridLayoutManager item错乱 android recyclerview edittext_自定义

如图,适配器继承 RecyclerView.Adapter<>,并将泛型指定为 适配器的内部类ViewHolder(继承RecyclerView.ViewHolder)。

接着根据我们自定义的item重写图中3个方法及内部类。

· RecyclerView.ViewHolder : 生成子项item布局,通过findViewById()可获取布局中控件实例。

android recyclerview GridLayoutManager item错乱 android recyclerview edittext_android_02

· onCreateViewHolder : 用于创建 ViewHolder 实例(其中R.layout.item为自定义item布局)

android recyclerview GridLayoutManager item错乱 android recyclerview edittext_RecyclerView_03

·onBindViewHolder : 将视图与数据进行绑定。数据从适配器构造函数传入。

android recyclerview GridLayoutManager item错乱 android recyclerview edittext_分割线_04

其中泛型item为数据的实体类,根据不同数据创建。

android recyclerview GridLayoutManager item错乱 android recyclerview edittext_RecyclerView_05

android recyclerview GridLayoutManager item错乱 android recyclerview edittext_自定义_06

· getItemCount : 用于告诉RecyclerView一共有多少子项。直接返回数据源长度。

android recyclerview GridLayoutManager item错乱 android recyclerview edittext_自定义_07

然后在活动中创建RecyclerView实例并设置布局方式,创建适配器并传入RecyclerView中。

List<item> items=new ArrayList<>();

android recyclerview GridLayoutManager item错乱 android recyclerview edittext_点击事件_08

其中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

在适配器中定义接口,提供回调:

android recyclerview GridLayoutManager item错乱 android recyclerview edittext_分割线_09

对item设置监听并回调给我们自定义的监听。先在onCreateViewHolder中添加如下代码:

view.setOnLongClickListener(this); view.setOnClickListener(this);

在onBindViewHolder添加如下代码 :

holder.itemView.setTag(position);

重写onClick(),onLongClick()方法:

android recyclerview GridLayoutManager item错乱 android recyclerview edittext_自定义_10

最后在活动中监听:

android recyclerview GridLayoutManager item错乱 android recyclerview edittext_分割线_11

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

在适配器中添加如下代码:

android recyclerview GridLayoutManager item错乱 android recyclerview edittext_android_12

其中notifyItemInserted()及notifyItemRemoved()会提醒RecyclerView刷新页面。