RecyclerView

RecyclerView的特点

  1. 自带ViewHolder
  2. 横向,竖向、列表,多行列表和流式皆可
  3. 分割线控制方便

使用之前

导入这个md设计包
compile 'com.android.support:design:23.4.0'

如何使用

XML的布局
  • activity_main.xml
 

  • item.xml
 
代码部分1

首先必须要设置一个LayoutManager
recyclerView.setLayoutManager();
这个LayoutManager有三种模式 :
1.线性流模式 : LinearLayoutManager
2.网格流模式 : GridLayoutManager
3.瀑布流模式 : StaggerGridLayoutManager

  1. 如果是 LinearLayoutManager 模式 :
//可以通过下面方法设置垂直或者水平
linearLayoutManager.setOrientation(OrientationHelper.VERTICAL);
linearLayoutManager.setOrientation(OrientationHelper.HORIZONTAL);
  1. 如果是 GridLayoutManager 模式 :
//2表示一排显示2个网格,如果是3,一排就显示3个网格
GridLayoutManager gridLayoutManager = new GridLayoutManager(getContext(),2);
//这个是设置当第几排时,占用多少个网格,从0开始
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {
            if (position == 0){
                return 2;            //当第1排时,占用2个网格(意思是第1排只有一整排)
            }
            if (position == 3){
                return 2;            //当第3排时,占用2个网格(意思是第3排只有一整排)
            }
            return 1;                //其他排占用1个网格(意思是其他都是两两一排)
        }
});
  1. 如果是StaggerGridLayoutManager模式 :
待定,没有玩过...
代码部分2

然后就需要一个Adapter继承下面这个自带VIewHolder的Adapter
RecyclerView.Adapter 最好有几个item就在Adapter里面写几个 int 型的 ITEM 比如 : private static final int ITEM_1 = 1 , ITEM_2 = 2 , ITEM_3 = 3 , ITEM_4 = 4;
重写里面重要的四个方法

//创建子布局的方法,有几个item就需要返回几个不同的ViewHolder
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){...}
//绑定item的ViewHolder的方法,可以在此方法里查找item里的控件
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position){...}
//确定返回总共有多少个item
@Override
public int getItemCount(){...}
//可以根据不同的type来确定当多少行的时候,返回什么类型的item
@Override
public int getItemViewType(int position){...}

onCreateViewHolder方法简写 :

View view = null;
switch (viewType){
    case ITEM_1:
        view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item1,parent,false);
        return new Holder1(view);
    case ITEM_2:
        view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item2,parent,false);
        return new Holder2(view);
//此方法里也可以查找控件,设置监听
//mImageView = (ImageView) view.findViewById(R.id.img);
//mImageView1.setOnClickListener();

onBindViewHolder方法简写 :

if (holder instanceof Holder1){
    Holder1 holder1 = (Holder1) holder;
    //里面写逻辑代码
if (holder instanceof Holder2){
    Holder2 holder2 = (Holder2) holder;
    //里面写逻辑代码

getItemViewType方法简写 :

if (position == 0){
    return ITEM_2;
}
if (position == 2){
    return ITEM_1;
}
if (position == 3){
    return ITEM_2;
}
return ITEM_1;

你可能感兴趣的:(RecyclerView)