Android开发:RecyclerView全面解析

       RecyclerView是support-v7中提供的新的滑动组件,最低兼容到API11。RecyclerView可实现的功能类似ListView、GridView以及已废弃的Gallery。我们可以用RecyclerView很快速的实现复杂的列表布局。

       RecyclerView优势在于:低耦合高内聚。主要优点有:1.RecyclerView封装了viewholder的回收和复用;RecyclerView标准化了ViewHolder,编写Adapter面向的是ViewHolder而不再是View;3.提供一种插拔式的体验,高度解耦,针对一个Item的显示RecyclerView专门抽取出了相应的类,来控制Item的显示;3.可以控制Item增删的动画,可以通过ItemAnimator这个类来进行控制。

        RecyclerView的使用方法

1. 添加相关依赖

gradle4之前的版本:

compile 'com.android.support:recyclerview-v7:27.1.1'

gradle4 :

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

2.在XML文件中添加RecyclerView布局代码




    

3.在Activity中绑定RecyclerView控件并设置布局管理器以及adapter

Activity


public class RVDemoActivity extends Activity {
    @BindView(R.id.listview)
    RecyclerView listview;
    private MyRecyclerViewAdapter myRecyclerViewAdapter;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_rvd_demo);
        ButterKnife.bind(this);
        //设置RecyclerView管理器
        listview.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
        //设置添加或删除item时的动画,这里使用默认动画
        listview.setItemAnimator(new DefaultItemAnimator());
        //初始化适配器
        myRecyclerViewAdapter = new MyRecyclerViewAdapter(getLists(16));
        listview.setAdapter(myRecyclerViewAdapter);

    }
    private List getLists(int count){
        List list=new ArrayList<>();
        for (int i=0;i

Adapter

package com.my.learn.code.listview.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.my.learn.code.view.R;

import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;

public class MyRecyclerViewAdapter extends RecyclerView.Adapter {
    private Context context;
    private List list;

    public MyRecyclerViewAdapter(List list) {
        this.list = list;
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view;
        view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_rvd, parent, false);
        this.context = parent.getContext();
        return new DemoHolder(view);
    }

    public class DemoHolder extends RecyclerView.ViewHolder {
        @BindView(R.id.name)
        TextView name;

        public DemoHolder(View view) {
            super(view);
            ButterKnife.bind(this, itemView);
        }

        public void showView(int position, String item) {
            name.setText(item);
        }
    }


    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
//        holder.showView(holder.getAdapterPosition(), this.list.get(position));
        DemoHolder demoHolder = (DemoHolder) holder;
        demoHolder.showView(holder.getAdapterPosition(), this.list.get(position));
    }

    @Override
    public int getItemCount() {
        return list.size();
    }
}

item_rvd.xml




运行效果如下图:

Android开发:RecyclerView全面解析_第1张图片

这样一个简单的RecyclerView demo就完成了, 下面重点说一下

recyclerView.setLayoutManager(LayoutManager layoutManager)

setLayoutManager可以使用三个类:

  • LinearLayoutManager:线性布局管理器
  • StaggeredGridLayoutManager: 错列网格布局管理器
  • GridLayoutManager:网格布局管理器

一、LayoutMananger子类LinearLayoutManager

一般使用LinearLayoutManager的两种构造方法
第一种构造方法:

new LinearLayoutManager(Context context)

参数传上下文环境,默认的是垂直布局。

第二种构造方法:
 

new LinearLayoutManager( Context context, int orientation, boolean reverseLayout)

第一个参数传上下文环境;第二个参数传布局显示方式,布局的显示方式有两种:LinearLayoutManager.VERTICAL(垂直显示)和LinearLayoutManager.HORIZONTAL(水平显示);第三个参数为布尔值是否反转,是否翻转的意思是,比如第二个参数是LinearLayoutManager.VERTICAL,如果不翻转就是数据从上到下加载,如果翻转就是从下到上加载。

二、LayoutManager的子类StaggeredGridLayoutManager

构造方法:

new StaggeredGridLayoutManager(int spanCount,int orientation)

使用错列的布局,指定两个参数,一个是要显示的列数spanCount,一个是显示的方向orientation。

三、LinearLayoutManager 的子类GridLayoutManager

GridLayoutManager更像是LinearLayoutManager和StaggeredGridLayoutManager结合体,可以设置列数,又可以设置显示方向以及设置页面的加载数据是否反转;
第一种构造方法:

new GridLayoutManager(Context context, int spanCount)

第一个参数为上下文环境,第二个显示列数,默认显示垂直布局。

第二种构造方法:

new GridLayoutManager( Context context, int spanCount, int orientation, boolean reverseLayout)

第一个参数为上下文环境,第二个显示列数,第三个参数为方向,第四个参数为是否反转。

最后推荐一个强大的RecyclerAdapter:BRVAH。它能节约开发者大量的开发时间,集成了大部分列表常用需求解决方案。

你可能感兴趣的:(Android学习笔记)