RecyclerView通用Adapter与ViewHolder

用习惯了ListView和GridView的通用的Adapter和ViewHolder,为高级版的RecyclerView也修改一个通用的。

Adapter

package adapter;

import android.support.v7.widget.RecyclerView;

import java.util.List;

public abstract class RecyclerAdapter<T> extends RecyclerView.Adapter<RecyclerViewHolder> {

    private List<T> data;

    public RecyclerAdapter(List<T> data) {
        this.data = data;
    }

    @Override
    public int getItemCount() {
        return data.size();
    }
}

代入泛型的抽象类,使用时需要重写

    @Override
    public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return null;
    }

    @Override
    public void onBindViewHolder(RecyclerViewHolder holder, int position) {

    }

RecyclerView必须有ViewHolder实例,那么ViewHolder

package adapter;

import android.graphics.Bitmap;
import android.support.v7.widget.RecyclerView;
import android.util.SparseArray;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import org.xutils.image.ImageOptions;
import org.xutils.x;


public class RecyclerViewHolder extends RecyclerView.ViewHolder {

    private View view;

    public RecyclerViewHolder(View itemView) {
        super(itemView);
        this.view = itemView;
    }

    @SuppressWarnings("unchecked")
    public <T extends View> T get(int id) {
        SparseArray<View> viewHolder = (SparseArray<View>) view.getTag();
        if (viewHolder == null) {
            viewHolder = new SparseArray<>();
            view.setTag(viewHolder);
        }
        View childView = viewHolder.get(id);
        if (childView == null) {
            childView = view.findViewById(id);
            viewHolder.put(id, childView);
        }
        return (T) childView;
    }

    /**
     * 设置TextView的文字
     *
     * @param id   textView对应id
     * @param text 文字
     */
    public void setTVText(int id, String text) {
        TextView tv = get(id);
        tv.setText(text);
    }

    /**
     * 设置ImageView的图片
     *
     * @param id         ImageView对应id
     * @param drawableId 图片id
     */
    public void setImageDrawable(int id, int drawableId) {
        ImageView imageView = get(id);
        imageView.setImageResource(drawableId);
    }

    /**
     * 设置ImageView的图片
     *
     * @param id ImageView对应id
     * @param bm bitmap
     */
    public void setImageBitmap(int id, Bitmap bm) {
        ImageView imageView = get(id);
        imageView.setImageBitmap(bm);
    }

使用样例

RecyclerAdapter<Entity> recyclerAdapter = new RecyclerAdapter<Entity>(data) {

        @Override
        public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View v = LayoutInflater.from(getActivity()).inflate(R.layout.item, parent, false);
            return new RecyclerViewHolder(v);
        }

        @Override
        public void onBindViewHolder(RecyclerViewHolder holder, final int position) {
            //在这里设置item控件内容(与对应实体Entity相关)
            //如holder.setTVText(R.id.tv, data.get(position).getName());
            View itemView = holder.itemView;
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //点击事件
                }
            });

            itemView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    //长按事件
                    return true;
                }
            });

        }
    };

其余与正常RecyclerView使用方法一致。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值