为RecyclerView打造通用adapter

来源:互联网 发布:免费虚拟手机号软件 编辑:程序博客网 时间:2024/05/20 08:25

上周我才开始接触RecyclerView,感谢我们鞠老师教会我使用。用了之后发现确实不错,但是我想把adapter封装一下,变一个通用的,岂不是用起来更方便?!言归正传下面来讲解一下recyclerview的使用。

如果有不会用RecyclerView的同学请参考我男神的这篇文章,讲的非常详细。本来也想写一篇来着,但是感觉没鸿洋大神写的好就放弃了,这章来说一下如何封装通用adapter。

CommonAdapter类代码如下:

package com.czh.kuihuajingyingwang.adapters;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import java.util.List;/** * Created by YYD on 2016-08-31. */public  abstract class CommonAdapter<T> extends RecyclerView.Adapter<CommonAdapter<T>.MyViewHolder> {    //封装点击事件的方法。    public interface  OnItemClickListioner{        public void onItemClick(int position);    }    OnItemClickListioner onItemClickListioner;    public void setOnItemClickListioner(OnItemClickListioner onItemClickListioner) {        this.onItemClickListioner = onItemClickListioner;    }    private Context mContext;    private LayoutInflater mInflater;    protected List<T> mDatas;//数据集合    protected final int mItemLayoutId;    public CommonAdapter(Context context, List<T> mDatas, int itemLayoutId)    {        this.mContext = context;        this.mInflater = LayoutInflater.from(mContext);        this.mDatas = mDatas;        this.mItemLayoutId = itemLayoutId;    }    @Override    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View view = mInflater.inflate(mItemLayoutId,parent,false);        return new MyViewHolder(view);    }    @Override    public   void onBindViewHolder(MyViewHolder holder, final int position){        if(onItemClickListioner!=null){//为每一个item添加点击事件            holder.itemView.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View view) {                    onItemClickListioner.onItemClick(position);                }            });        }    }    @Override    public int getItemCount() {        return mDatas.size();    }    public class MyViewHolder extends RecyclerView.ViewHolder{        public MyViewHolder(View view){            super(view);        }        public <V extends View> V fMview( int id){            return  (V)itemView.findViewById(id);        }    }    public List<T> getDatas(){        return  mDatas;    }}

使用方法如下

    recylerView = fView(R.id.buyNumRecylerView);    final ArrayList<String>list = new ArrayList<>();    list.add("111");    list.add("222");    list.add("333");    buyNumRecylerView.setLayoutManager(new LinearLayoutManager(this));    buyNumRecylerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL_LIST));    buyNumRecylerView.setItemAnimator(new DefaultItemAnimator());    CommonAdapter commonAdapter  = new CommonAdapter(PointBuyActivity.this,list,R.layout.adapter_pointbuy) {        @Override        public void onBindViewHolder(MyViewHolder holder, int position) {            super.onBindViewHolder( holder, position);            AppCompatTextView item_pointTv = (AppCompatTextView)holder.fMview(R.id.item_pointTv);            AppCompatTextView item_moneyTv = (AppCompatTextView)holder.fMview(R.id.item_moneyTv);            LinearLayoutCompat item_selImg = (LinearLayoutCompat)holder.fMview(R.id.item_selImg);            item_pointTv.setText(getDatas().get(position).toString());        }    };    commonAdapter.setOnItemClickListioner(this);//添加点击事件    buyNumRecylerView.setAdapter(commonAdapter);     @Override    public void onItemClick(int position) {         Toast.makeText(PointBuyActivity.this,""+position,Toast.LENGTH_SHORT).show();    }

结尾

是不是用起来简单了很多,项目代码我就不上了,大家直接拷贝下来用就行。
有不明白的小伙伴可以留言

2 0