ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码
当前位置:首页 >> 网络编程 >> Android开发 >> Android RecyclerView多个Item布局的实现(可实现头部底部)

钱柜999娱乐官网手机版

来源:网络整理     时间:2015-10-10     关键词:Activity

本篇文章主要介绍了"Android RecyclerView多个Item布局的实现(可实现头部底部)",主要涉及到Activity方面的内容,对于Android开发感兴趣的同学可以参考一下: 废话不多说,小猿,上代码package git.dzc.library;import android.support.v7.widget.RecyclerVie...

废话不多说,小猿,上代码

package git.dzc.library;
import android.support.v7.widget.RecyclerView;
import android.view.ViewGroup;

/**
 * Created by dzc on 15/10/9.
 */
public abstractclassHeadFootAdapter<HeadViewHolderextendsRecyclerView.ViewHolder,FootViewHolderextendsRecyclerView.ViewHolder,ItemViewHolderextendsRecyclerView.ViewHolder> extendsRecyclerView.Adapter<RecyclerView.ViewHolder> {//item的type 代表头部 中间  底部三个类型
    static int TYPE_HEAD = 0;
    static int TYPE_ITEM = 1;
    static int TYPE_FOOT = 2;
    /**
    *头部ViewHolder
    **/
    public abstract HeadViewHolder onCreateHeaderViewHolder(ViewGroup parent, int position);
    public abstract ItemViewHolder onCreateItemViewHolder(ViewGroup parent, int position);
    public abstract FootViewHolder onCreateFooterViewHolder(ViewGroup parent, int position);
    public abstract void onBindHeaderViewHolder(HeadViewHolder holder, int position);
    public abstract void onBindItemViewHolder(ItemViewHolder holder, int position);
    public abstract void onBindFooterViewHolder(FootViewHolder holder, int position);
    /**
    *根据viewType来创建不同的ViewHolder
    **/@Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        switch (viewType){
            case0:
                return onCreateHeaderViewHolder(viewGroup,viewType);
            case1:
                return onCreateItemViewHolder(viewGroup, viewType);
            default:
                return onCreateFooterViewHolder(viewGroup,viewType);
        }
    }
    /**
    *根据ViewType绑定数据  这里重新计算了position,使每个部分的position都从0开始
    **/@Override
    public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i) {

      int headCount = getHeadViewCount();
      int itemViewCount = getItemViewCount();
      int itemType = getItemViewType(i);
      switch (itemType){
          case0:
              onBindHeaderViewHolder((HeadViewHolder) viewHolder,i);
              break;
          case1:
              onBindItemViewHolder((ItemViewHolder) viewHolder,i-headCount);
              break;
          case2:
              onBindFooterViewHolder((FootViewHolder) viewHolder,i-itemViewCount-headCount);
              break;
        }
    }

    /**
    *adapter会调用这个方法来获取item的总数
    *因为在这里  总数为上中下三部分数量加起来  不需要重写 
    *所以标志为final
    *返回所有View的数量
    **/@Override
    public final int getItemCount(){
        return  getHeadViewCount() + getFootViewCount() + getItemViewCount();
    }
    /**
    *返回头部View的数量
    **/
    public abstract int getHeadViewCount();

    /**
    *返回底部View的数量
    **/
    public abstract int getFootViewCount();

    /**
    *返回中间View的数量
    **/
    public abstract int getItemViewCount();
    /**
    *这句话是关键  根据position来判断item的类型 
    *adapter会将此方法的返回值传入onCreateViewHolder
    **/@Override
    public int getItemViewType(int position) {
     //   return super.getItemViewType(position);
        int headCount = getHeadViewCount();
        int itemCount = getItemViewCount();
        if(position<headCount){
            return TYPE_HEAD;
        }
        if(position>headCount+itemCount-1){
            return TYPE_FOOT;
        }
        return TYPE_ITEM;
    }
}

这里我把Adapter重新封装了一遍,实现了上中下三个部分的ViewHolder的创建和数据绑定,基本语法和原来普通的RecyclerView的Adapter一样,下面是demo代码,代码很简单,就不解释了,item里面就放了一个TextView

相关图片

相关文章