ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-06-07 17:03:50  阅读:236  来源: 互联网

标签:mData return BaseAdapter int 占位 封装 public


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);
        }
    }
}

 

标签:mData,return,BaseAdapter,int,占位,封装,public
来源: https://www.cnblogs.com/mymy-android/p/14859557.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有