Android 对封装RecyclerView.Adapter讲解

这篇博客详细讲解了Android中的RecyclerView.Adapter,对比ListView的BaseAdapter,突出了RecyclerView.Adapter的特点。博主介绍了Adapter的关键方法,如onBindViewHolder,并提倡使用泛型进行数据处理。此外,还分享了如何封装RecyclerHolder以简化子类开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先先得知RecyclerView.Adapter有什么方法,这样才知道与ListView的BaseAdapter有什么区别:

public class MyAdapter extends RecyclerView.Adapter {
   
   

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return null; // 返回创建一个ViewHolder
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        // 这里是刷新Item
    }

    @Override
    public int getItemCount() {
        return 0; // 有多少个Item
    }

    @Override
    public int getItemViewType(int position) {
        return super.getItemViewType(position); // 返回位置position,item的类型
    }

    @Override
    public void registerAdapterDataObserver(RecyclerView.AdapterDataObserver observer) {
        super.registerAdapterDataObserver(observer);
        // 注册监听数据被刷新
    }

    @Override
    public void unregisterAdapterDataObserver(RecyclerView.AdapterDataObserver observer) {
        super.unregisterAdapterDataObserver(observer);
        // 移除监听数据被刷新
    }
}

为了处理onBindViewHolder和onBindViewHolder故定义二个抽象方法:

    /**
     * item布局ID
     *
     * @param viewType 类别
     * @return item布局ID
     */
    public abstract int getContentView(int viewType);

    /**
     * item刷新的回调
     *
     * @param holder   ViewHolder
     * @param object   Item数据对象
     * @param position 刷新的位置
     */
    public abstract void onInitView(RecyclerHolder holder, T object, int position);

在开发中,Adapter的数据都用List来处理的,所以把RecyclerAdatper封装成泛形:

package com.recycler.lib;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.RecyclerView;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import java.util.ArrayList;
import java.util.List;

/**
 * creater:cyy
 * time:2017/2/8
 * describe:定义{@link android.support.v7.widget.RecyclerView}OnItemClickListener万能适配器
 */
public abstract class RecyclerAdatper<T> extends RecyclerView.Adapter<RecyclerHolder> {

    private Context mContext;
    private List<T> mList;
    private OnItemClickListener mOnItemClickListener;

    public RecyclerAdatper(Context context) {
        this(context, new ArrayList<T>());
    }

    public RecyclerAdatper(Context context, List<T> list) {
        mContext = context;
        mList = list;
    }

    public Context getContext() {
        return mContext;
    }

    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        this.mOnItemClickListener = onItemClickListener;
    }

    @Override
    public RecyclerHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return new RecyclerHolder(getLayoutInflater().inflate(getContentView(viewType), parent,
                false));
    }

    @Override
    public int getItemViewType(int position) {
        return super.getItemViewType(position);
    }

    @Override
    public void onBindViewHolder(final RecyclerHolder holder, final int position) {
        onInitView(holder, getItem(position), position);
        if (null != mOnItemClickListener) { // 实现item点击事件回调<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值