万能RecyclerView 支持多viewholder适配器,从重复中解脱出来!

编程入门 行业动态 更新时间:2024-10-09 07:18:53

万能RecyclerView 支持多viewholder<a href=https://www.elefans.com/category/jswz/34/1770284.html style=适配器,从重复中解脱出来!"/>

万能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适配器,从重复中解脱出来!

本文发布于:2024-03-07 08:20:40,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1717317.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:适配器   RecyclerView   viewholder

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!