Android的RecyclerView基本应用

来源:互联网 发布:商业银行网络金融联盟 编辑:程序博客网 时间:2024/05/16 11:18

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下载

0 0
原创粉丝点击