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

package git.dzc.library;import android.support.v7.widget.RecyclerView;import android.view.ViewGroup;/** * Created by dzc on 15/10/9. */public abstract class HeadFootAdapter<HeadViewHolder extends RecyclerView.ViewHolder,FootViewHolder extends RecyclerView.ViewHolder,ItemViewHolder extends RecyclerView.ViewHolder> extends RecyclerView.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){            case 0:                return onCreateHeaderViewHolder(viewGroup,viewType);            case 1:                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){          case 0:              onBindHeaderViewHolder((HeadViewHolder) viewHolder,i);              break;          case 1:              onBindItemViewHolder((ItemViewHolder) viewHolder,i-headCount);              break;          case 2:              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

package git.dzc.head_foot_recycleview;import android.graphics.Color;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import git.dzc.library.HeadFootAdapter;public class MainActivity extends AppCompatActivity {    private RecyclerView rv;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        rv = (RecyclerView) findViewById(R.id.rv);        rv.setLayoutManager(new LinearLayoutManager(MainActivity.this));        rv.setAdapter(new HeadFootAdapter<HeadViewHolder,FootViewHolder,ItemViewHolder>() {            @Override            public HeadViewHolder onCreateHeaderViewHolder(ViewGroup parent, int position) {                View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.item2,parent,false);                return new HeadViewHolder(view);            }            @Override            public ItemViewHolder onCreateItemViewHolder(ViewGroup parent, int position) {                View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.item,parent,false);                return new ItemViewHolder(view);            }            @Override            public FootViewHolder onCreateFooterViewHolder(ViewGroup parent, int position) {                View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.item2,parent,false);                return new FootViewHolder(view);            }            @Override            public void onBindHeaderViewHolder(HeadViewHolder holder, int position) {                holder.tv.setTextColor(Color.GREEN);                holder.tv.setTextSize(30);                holder.tv.setText("head "+position);            }            @Override            public void onBindItemViewHolder(ItemViewHolder holder, int position) {                holder.tv.setText("item "+position);            }            @Override            public void onBindFooterViewHolder(FootViewHolder holder, int position) {                holder.tv.setTextColor(Color.BLUE);                holder.tv.setTextSize(34);                holder.tv.setText("foot "+position);            }            @Override            public int getItemViewCount() {                return 10;            }            @Override            public int getHeadViewCount() {                return 7;            }            @Override            public int getFootViewCount() {                return 8;            }        });    }    class ItemViewHolder extends RecyclerView.ViewHolder{        public TextView tv;        public ItemViewHolder(View itemView) {            super(itemView);            tv = (TextView) itemView.findViewById(R.id.tv);        }    }    class HeadViewHolder extends RecyclerView.ViewHolder{        public TextView tv;        public HeadViewHolder(View itemView) {            super(itemView);            tv = (TextView) itemView.findViewById(R.id.tv);        }    }    class FootViewHolder extends RecyclerView.ViewHolder{        public TextView tv;        public FootViewHolder(View itemView) {            super(itemView);            tv = (TextView) itemView.findViewById(R.id.tv);        }    }}

这是效果图

更多相关文章

  1. android Pull解析xml 使用小结
  2. Android(安卓)http HttpURLConnection
  3. 【原创】一个android访问http资源的便捷工具类——HttpHelper
  4. Android(安卓)ListView addScrapView ArrayIndexOutOfBoundsExce
  5. android 返回键 退出
  6. android input系统如何导入kl文件
  7. Android下免Root权限截屏
  8. Android.API.Context.getFilesDir()
  9. Android(安卓)手机端与服务端POST数据交互类

随机推荐

  1. android加载进度条
  2. Android(安卓)Studio Mac 下卸载与安装
  3. Android(安卓)划出一个半透明的PopupWind
  4. Android(安卓)获取几天后的时间
  5. android 4.3源码编译
  6. 关于 Linux Polkit 权限提升漏洞(CVE-202
  7. html基础-图文列表、表格
  8. html基础-表格合并练习
  9. SEO主要是做什么的?零基础能学习吗?
  10. 板绘发型怎么画?动漫绘画头发教程