适配器,从重复中解脱出来!"/>
万能RecyclerView 支持多viewholder适配器,从重复中解脱出来!
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); } }
好,贴完收工。。
更多推荐
万能RecyclerView 支持多viewholder适配器,从重复中解脱出来!
发布评论