孟老板 BaseAdapter封装 空数据占位图

Posted 孟老板

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了孟老板 BaseAdapter封装 空数据占位图相关的知识,希望对你有一定的参考价值。

1.空数据占位

前言:

  当列表中无数据时,  显示暂无数据的占位View;

 

现有实现方式: 

  1. 在每一个需要空占位的 RecycleView 页面中,添加占位View (可以用 ViewStub); 然后当无数据时, 控制 RecycleView 和 NothingView 的显示隐藏

  2. 重写 RecycleView (想了解的请自行百度)

  3. 重写Adapter 

  显然 第一种方式 费时费力;  第二种第三种随意;

 

1.1 分析:

  1.集合没有数据时, 算作只有 1个条目的 Adapter

  2.空数据时, 返回 空布局的 ViewHolder, 且不需要渲染数据

 

直接上代码

public abstract class BaseNothingAdapter<T> extends BaseAdapter<T> {
    protected static final int ITEM_NOTHING = 0xad;     //空类型 Item
    /**
     * 空布局 res
     */
    @LayoutRes
    private int mNothingRes;

    public BaseNothingAdapter(@NotNull Context mContext, @Nullable List<T> mData, @Nullable AdapterListener listener) {
        this(mContext, mData, listener, R.layout.item_nothing);
    }

    public BaseNothingAdapter(@NotNull Context mContext, @Nullable List<T> mData, @Nullable AdapterListener listener, @LayoutRes int nRes) {
        super(mContext, mData, listener);
        this.mNothingRes = nRes;
    }

    /**
     * 当集合数据为空时, 返回 1
     * @return
     */
    @Override
    public int getItemCount() {
        if(mData == null || mData.isEmpty())
            return 1;
        return mData.size();
    }

    /**
     * 当集合数据为空时, 返回 空布局类型
     * @param position
     * @return
     */
    @Override
    public int getItemViewType(int position) {
        if(mData == null || mData.isEmpty()){
            return ITEM_NOTHING;
        }else {
            return getMyType(position);
        }
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        //空布局类型时, 返回 NothingHolder
        if(viewType == ITEM_NOTHING)
            return new NothingHolder(layoutInflater.inflate(mNothingRes, parent, false));
        else
            return createMyHolder(parent,viewType);
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder recHolder, final int position) {
        // 空布局类型时, 不做操作;
        if(getItemViewType(position) == ITEM_NOTHING){
            return;
        }
        onBindMyData(recHolder,position);
    }

    protected static class NothingHolder extends RecyclerView.ViewHolder {
        NothingHolder(@NonNull View itemView) {
            super(itemView);
        }
    }
}

 

以上是关于孟老板 BaseAdapter封装 空数据占位图的主要内容,如果未能解决你的问题,请参考以下文章

带有 BaseAdapter 的 ListView

NStextfield 显示空占位符(即空字符串),而不是使用核心数据显示“无选择”。苹果漏洞?

android:ListView缓存机制及BaseAdapter的三重境界(逗比式,普通式,文艺式)

WEB测试常见问题汇总

使用空占位符将图像插入幻灯片(PowerPoint)

如果 *ngFor 让 HTML 绑定中的对象的对象返回一个空数组,如何显示占位符