Android基于zhy rvadapter自定义EmptyAdapter实现recyclerview 添加EmptyView

mac2025-02-14  10

首先添加依赖

implementation 'com.zhy:base-rvadapter:3.0.3'

自定义EmptyAdapter继承 MultiItemTypeAdapter

 

直接上代码

public abstract class EmptyAdapter<T> extends MultiItemTypeAdapter<T> { protected Context mContext; protected int mLayoutId; protected List<T> mDatas; protected LayoutInflater mInflater; private boolean emptyView=false; public static final int VIEW_TYPE_EMPTY = -1; public EmptyAdapter(final Context context, final int layoutId, List<T> datas) { super(context, datas); mContext = context; mInflater = LayoutInflater.from(context); mLayoutId = layoutId; mDatas = datas; addItemViewDelegate(new ItemViewDelegate<T>() { @Override public int getItemViewLayoutId() { return layoutId; } @Override public boolean isForViewType( T item, int position) { if(EmptyAdapter.super.getItemCount()==0&&emptyView){ return false; } return true; } @Override public void convert(ViewHolder holder, T t, int position) { EmptyAdapter.this.convert(holder, t, position); } }); } @Override public int getItemCount() { if (super.getItemCount()==0&&emptyView) { return 1; } return super.getItemCount(); } @Override public int getItemViewType(int position) { if (super.getItemCount()==0&&emptyView) { return mItemViewDelegateManager.getItemViewType(null, position); } return super.getItemViewType(position); } @Override public void onBindViewHolder(ViewHolder holder, int position) { if (super.getItemCount()==0&&emptyView) { convert(holder,null); return ; } convert(holder, mDatas.get(position)); } public void setEmptyView(final int layoutId, final ConvertEmptyView mConvertEmptyView){ emptyView=true; addItemViewDelegate(new ItemViewDelegate<T>() { @Override public int getItemViewLayoutId() { return layoutId; } @Override public boolean isForViewType( T item, int position) { if(EmptyAdapter.super.getItemCount()==0){ return true; } return false; } @Override public void convert(ViewHolder holder, T t, int position) { mConvertEmptyView.convertEmptyView(holder); } }); } protected abstract void convert(ViewHolder holder, T t, int position); public interface ConvertEmptyView{ void convertEmptyView(ViewHolder holder); } }

activity中使用

adapter = object : EmptyAdapter<Item>(this, R.layout.item_view, listData) { override fun convert(holder: ViewHolder?, data: Item?, position: Int) { //todo itemview 绑定数据 } } adapter?.setEmptyView(R.layout.layout_empty_view) { //todo EmptyView绑定数据 it.setText(R.id.tv_empty,"暂无数据") } mRecyclerView.adapter = adapter mRecyclerView.layoutManager = linearLayoutManager

 

 

 

最新回复(0)