Android RecyclerView多个Item布局的实现(可实现头部底部)

来源:互联网 发布:万能的淘宝 编辑:程序博客网 时间:2024/05/16 07:58
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

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;publicclassMainActivityextendsAppCompatActivity {private RecyclerView rv;    @OverrideprotectedvoidonCreate(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>() {            @Overridepublic HeadViewHolder onCreateHeaderViewHolder(ViewGroup parent, int position) {                View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.item2,parent,false);                returnnew HeadViewHolder(view);            }            @Overridepublic ItemViewHolder onCreateItemViewHolder(ViewGroup parent, int position) {                View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.item,parent,false);                returnnew ItemViewHolder(view);            }            @Overridepublic FootViewHolder onCreateFooterViewHolder(ViewGroup parent, int position) {                View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.item2,parent,false);                returnnew FootViewHolder(view);            }            @OverridepublicvoidonBindHeaderViewHolder(HeadViewHolder holder, int position) {                holder.tv.setTextColor(Color.GREEN);                holder.tv.setTextSize(30);                holder.tv.setText("head "+position);            }            @OverridepublicvoidonBindItemViewHolder(ItemViewHolder holder, int position) {                holder.tv.setText("item  "+position);            }            @OverridepublicvoidonBindFooterViewHolder(FootViewHolder holder, int position) {                holder.tv.setTextColor(Color.BLUE);                holder.tv.setTextSize(34);                holder.tv.setText("foot "+position);            }            @OverridepublicintgetItemViewCount() {                return10;            }            @OverridepublicintgetHeadViewCount() {                return7;            }            @OverridepublicintgetFootViewCount() {                return8;            }        });    }    class ItemViewHolder extends RecyclerView.ViewHolder{        public TextView tv;        publicItemViewHolder(View itemView) {            super(itemView);            tv = (TextView) itemView.findViewById(R.id.tv);        }    }    class HeadViewHolder extends RecyclerView.ViewHolder{        public TextView tv;        publicHeadViewHolder(View itemView) {            super(itemView);            tv = (TextView) itemView.findViewById(R.id.tv);        }    }    class FootViewHolder extends RecyclerView.ViewHolder{        public TextView tv;        publicFootViewHolder(View itemView) {            super(itemView);            tv = (TextView) itemView.findViewById(R.id.tv);        }    }}

这是效果图 
Android RecyclerView多个Item布局的实现(可实现头部底部)

').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('
  • ').text(i)); }; $numbering.fadeIn(1700); }); });


  • 0 0
    原创粉丝点击