Skip to content

lavalike/adapter

Repository files navigation

adapter

RecyclerView.Adapter与ViewHolder封装,支持加载更多

Platform

依赖导入

项目根目录

allprojects {
	repositories {
		...
		maven { url 'https://jitpack.io' }
	}
}

模块目录

dependencies {
	implementation 'com.github.lavalike:adapter:0.0.1'
}

Adapter

普通Adapter

public class Adapter extends RecyclerAdapter<T> {
    public Adapter(List<T> list) {
        super(list);
    }

    @Override
    public RecyclerView.ViewHolder onAbsCreateViewHolder(ViewGroup parent, int viewType) {
        return null;
    }
}

加载更多Adapter

public class Adapter extends LoadRecyclerAdapter<T> {
    public Adapter(List<T> list, ViewGroup parent) {
        super(list, parent);
    }

    @Override
    public RecyclerView.ViewHolder onAbsCreateViewHolder(ViewGroup parent, int viewType) {
        return null;
    }

    @Override
    public void onLoadMore() {

    }
}

在onLoadMore回调方法内执行加载更多请求,分情况调用以下方法:

请求成功

setData(List<T> list);

addData(List<T> list);

请求失败

setState(LoadMoreState.ERROR);

没有更多数据

setState(LoadMoreState.NO_MORE);

LoadMoreState元注解定义如下

@Retention(RetentionPolicy.SOURCE)
public @interface LoadMoreState {
    int READY = 0;
    int LOADING = 1;
    int NO_MORE = 2;
    int ERROR = 3;
}

可重写LoadRecyclerAdapter的createLoadMoreFooter方法并创建自定义Footer,更多细节请参照默认实现类:LoadMoreFooterImpl

@Override
protected LoadMoreFooter createLoadMoreFooter() {
    return new Footer(this);
}

自定义Footer实现

public class Footer extends LoadMoreFooter {
    public Footer(OnLoadMoreCallback callback) {
        super(callback);
    }

    @Override
    public void onFooterViewCreated(View itemView) {

    }

    @Override
    public void onStateChange(int state) {

    }

    @Override
    public int layout() {
        return 0;
    }
}

添加Header

mAdapter.addHeader(new RecyclerItem() {
    @Override
    public int layout() {
        return 0;
    }

    @Override
    public void onViewCreated(View itemView) {

    }
}.onCreateView(mRecycler));

添加Footer

mAdapter.addFooter(new RecyclerItem() {
    @Override
    public int layout() {
        return 0;
    }

    @Override
    public void onViewCreated(View itemView) {

    }
}.onCreateView(mRecycler));

设置EmptyView

mAdapter.setEmpty(new RecyclerItem() {
    @Override
    public int layout() {
        return 0;
    }

    @Override
    public void onViewCreated(View itemView) {

    }
}.onCreateView(mRecycler));

如需实现多itemType,请重写getAbsItemViewType方法

@Override
protected int getAbsItemViewType(int position) {
    return super.getAbsItemViewType(position);
}

ViewHolder

ViewHolder继承RecyclerViewHolder,提供两种构造器以供选择

RecyclerViewHolder(@NonNull ViewGroup parent, @LayoutRes int layoutId);
RecyclerViewHolder(@NonNull View itemView);

在bind方法中进行数据绑定

public class ViewHolder extends RecyclerViewHolder<T> {
    public ViewHolder(@NonNull ViewGroup parent, int layoutId) {
        super(parent, layoutId);
    }

    @Override
    public void bind() {
        
    }
}

同时兼容Adapter和ViewHolder点击/长按事件

ViewHolder实现OnHolderClickCallback / OnHolderLongClickCallback接口,重写相关方法即可

源码逻辑

if (mItemClickCallback != null || holder instanceof OnHolderClickCallback) {
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (mItemClickCallback != null)
                mItemClickCallback.onItemClick(v, compatPosition(holder.getLayoutPosition()));
            if (holder instanceof OnHolderClickCallback)
                ((OnHolderClickCallback) holder).onItemClick(v, compatPosition(holder.getLayoutPosition()));
        }
    });
}
if (mItemLongClickCallback != null || holder instanceof OnHolderLongClickCallback) {
    holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            if (mItemLongClickCallback != null)
                mItemLongClickCallback.onItemLongClick(v, compatPosition(holder.getLayoutPosition()));
            if (holder instanceof OnHolderLongClickCallback)
                ((OnHolderLongClickCallback) holder).onItemLongClick(v, compatPosition(holder.getLayoutPosition()));
            return false;
        }
    });
}

About

RecyclerView.Adapter与ViewHolder封装,支持添加Header、Footer、空视图、加载更多

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors