首先添加依赖
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