您的位置:首页 > 其它

为RecyclerView打造通用adapter

2016-09-09 22:00 411 查看
上周我才开始接触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();
}


结尾

是不是用起来简单了很多,项目代码我就不上了,大家直接拷贝下来用就行。

有不明白的小伙伴可以留言
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: