1:主要编写两个文件:一个通用Adapter;一个通用的viewholder,没什么技术含量,主要是对泛型的使用和理解,直接贴代码吧
2:ComAdapter:(只有一种viewtype)
import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.ViewGroup; import com.madun.yeehaw.adapter.viewHolder.ComHolder; import java.util.ArrayList; import java.util.List; /** * Created by xubaipei on 2016/9/19. */ public abstract class ComAdapter<T> extends RecyclerView.Adapter<ComHolder> { private Context mContext; private List<T> mData; int mLayoutId; public ComAdapter(Context mContext, int layoutId) { this.mContext = mContext; mData = new ArrayList<T>(); mLayoutId = layoutId; } public void addData(List<T> list){ mData.clear(); mData.addAll(list); notifyDataSetChanged(); } @Override public ComHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new ComHolder(mContext,parent,mLayoutId); } @Override public void onBindViewHolder(ComHolder holder, int position) { conver(holder,mData.get(position)); } @Override public int getItemCount() { return mData.size(); } public abstract void conver(ComHolder holder, T t); }
3:支持多viewtype的适配器
package com.madun.yeehaw.adapter; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.ViewGroup; import com.madun.yeehaw.adapter.viewHolder.ComHolder; import java.util.ArrayList; import java.util.List; /** * Created by xubaipei on 2016/9/19. */ public abstract class MutiHolderAdapter<T> extends RecyclerView.Adapter<ComHolder> { private Context mContext; private List<T> mData; private int mLayoutId; public MutiHolderAdapter(Context mContext) { this.mContext = mContext; mData = new ArrayList<T>(); } public void addData(List<T> list){ mData.clear(); mData.addAll(list); notifyDataSetChanged(); } public abstract int getViewHolderLayoutId(int position); @Override public int getItemViewType(int position) { return getViewHolderLayoutId(position); } @Override public ComHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new ComHolder(mContext,parent,viewType); } @Override public void onBindViewHolder(ComHolder holder, int position) { mLayoutId = getViewHolderLayoutId(position); conver(holder,mData.get(position),mLayoutId); } @Override public int getItemCount() { return mData.size(); } public abstract void conver(ComHolder holder, T t,int layoutId); }
4:通用viewholder:
package com.madun.yeehaw.adapter.viewHolder; 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.ImageView; import android.widget.TextView; import com.bumptech.glide.Glide; /** * Created by xubaipei on 2016/9/19. */ public class ComHolder<T> extends RecyclerView.ViewHolder { private View mView; Context mContext; public ComHolder(Context context, ViewGroup parent,int layoutId){ this(LayoutInflater.from(context).inflate(layoutId,parent,false)); mContext = context; } public ComHolder(View itemView) { super(itemView); mView = itemView; } public void setText(int id,String str){ TextView textView = (TextView)mView.findViewById(id); textView.setText(str); } public void setImageView(int id,int resId){ ImageView imageView = (ImageView)mView.findViewById(id); if (imageView != null) imageView.setImageResource(resId); } public void loadNetImage(int id,String url){ ImageView imageView = (ImageView)mView.findViewById(id); if (imageView != null) Glide.with(mContext).load(url).into(imageView); } public void setOnClickListener(int id, View.OnClickListener clickListener){ View view = (View)mView.findViewById(id); if (view != null) view.setOnClickListener(clickListener); } }
好,贴完收工。。