Android的RecyclerView基本应用

RecyclerView出现的时间已经有一段时间了,相应关注的同学应该都了解这个东西,下面我们谈两个问题:

1. RecyclerView相对于ListView有什么优势
2. RecyclerView的简单使用

先说第一个问题,都说RecyclerView很好用,那么它到底好用在哪里呢?

1. RecyclerView具有很强的自定义性,也就是我们可以定义RecyclerView每一行的Item个数,有点像是ListView和GridView的结合版。只不过他可以随意制定哪一行显示几个Item,够强大吧。
2. RecyclerView可以自定义Item的动画,比如说要做一个添加Item和删除Item的功能,你可以通过自定义动画实现添加删除操作时的一个动画缓冲。(这个功能我们暂且不谈,有兴趣的同学可以自己研究,或者等我的新分享)
3. 拥有内置的ViewHolder并且可以根据不同的Type类型加载不同的View。也就是说一个List列表可以有多种不同类型的View,只需一个RecyclerView就可以搞定。
上面的这三条决定了RecyclerView会逐渐取代ListView,那么RecyclerView如此强带我们该如何使用它呢?

首先导入v7的recyclerview包:
点击如下按钮
这里写图片描述

左边选择app,右边顶部选择Dependencies,然后我们看到右上角有个+,选择Library Dependencies搜索recyclerview,选择v7包下的那个:

这里写图片描述

点击后我们的Library就添加成功了,效果图如下:

这里写图片描述
下面我们就可以开始调用RecyclerView了。
布局部分跟实例化我们就不多说了,直接上设置Item个数的部分:
主要的部分注解已经写的很清楚了。

 //设置布局管理为网格布局管理
        final GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 2);
        mRecyclerView.setLayoutManager(gridLayoutManager);
        //根据type类型设置每行的item数量
        gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup(){

            @Override
            public int getSpanSize(int position) {
                int type = mRecyclerView.getAdapter().getItemViewType(position);
                if(type == EvaluationModel.TYPE_ONE){
                    return gridLayoutManager.getSpanCount();
                }else{
                    return 1;
                }
            }
        });

Adapter:

package com.max.recycler.adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.ViewGroup;

import com.max.recycler.R;
import com.max.recycler.adapter.viewholder.BaseViewHolder;
import com.max.recycler.adapter.viewholder.TypeOneViewHolder;
import com.max.recycler.adapter.viewholder.TypeThreeViewHolder;
import com.max.recycler.adapter.viewholder.TypeTwoViewHolder;
import com.max.recycler.model.EvaluationModel;

import java.util.ArrayList;
import java.util.List;

/**
 * RecyclerView的Adapter
 */

public class MyRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{

    private LayoutInflater mInflater;
    private List<EvaluationModel> mList = new ArrayList<>();

    public MyRecyclerAdapter(Context mContext){
        mInflater = LayoutInflater.from(mContext);
    }

    public void addList(List<EvaluationModel> list){
        mList.addAll(list);
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        //根据viewType的类型判断返回不同的ViewHolder布局
        switch (viewType){
            case EvaluationModel.TYPE_ONE:
                return new TypeOneViewHolder(mInflater.inflate(R.layout.viewholder_one,parent,false));
            case EvaluationModel.TYPE_TWO:
                return new TypeTwoViewHolder(mInflater.inflate(R.layout.viewholder_two,parent,false));
            case EvaluationModel.TYPE_THREE:
                return new TypeThreeViewHolder(mInflater.inflate(R.layout.viewholder_three,parent,false));
        }
        return null;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        //根据postion获取item数据半丁到ViewHolder
        EvaluationModel model = mList.get(position);
        //强制转换为BaseViewHolder,调用bindViewHolder方法绑定数据
        ((BaseViewHolder)holder).bindViewHolder(model);
    }

    @Override
    public int getItemViewType(int position) {
        return mList.get(position).mType;
    }

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

效果图如下:
这里写图片描述

Demo下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值