万能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);
    }
}



好,贴完收工。。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值