孟老板 BaseAdapter封装 (三) 空数据占位图
- BaseAdapter封装(一) 简单封装
- BaseAdapter封装(二) Header,footer
- BaseAdapter封装(三) 空数据占位图
- BaseAdapter封装(四) PageHelper
- BaseAdapter封装(五) ListAdapter
- BaseAdapter封装(六) Healer,footer for List
- BaseAdapter封装(七) ConcatAdapter 改建头尾
- BaseAdapter封装(八) Paging 分页
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封装(五) ListAdapter
		BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ... 
- 孟老板 BaseAdapter封装 (一) 简单封装
		BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ... 
- 孟老板 BaseAdapter封装 (二) Healer,footer
		BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ... 
- 孟老板 BaseAdapter封装(四) PageHelper
		BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ... 
- 孟老板 ListAdapter封装, 告别Adapter代码 (上)
		BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ... 
- 使用Vue封装暂无数据占位图组件
		1. 前言 在日常开发中,页面上肯定有展示数据的需求,但是当某些时候该展示数据的地方此时数据为空时,就会留下一片空白,对用户体验不是很好,那么接下来我们就封装一个空数据时的占位展示图,告诉用户此时用户 ... 
- 孟老板 ListAdapter封装, 告别Adapter代码 (三)
		BaseAdapter系列 ListAdapter封装, 告别Adapter代码 (一) ListAdapter封装, 告别Adapter代码 (二) ListAdapter封装, 告别Adapter ... 
- 孟老板 ListAdapter封装, 告别Adapter代码 (四)
		BaseAdapter系列 ListAdapter封装, 告别Adapter代码 (一) ListAdapter封装, 告别Adapter代码 (二) ListAdapter封装, 告别Adapter ... 
- [iOS]一行代码集成空白页面占位图(基于runtime+MJRefresh思想)
		2018年01月03日阅读 2472 [iOS]一行代码集成空白页面占位图(基于runtime+MJRefresh思想) LYEmptyView 此框架是本人在5,6个月前,公司启动新项目的时候, ... 
随机推荐
- hdu2235 机器人的容器
			题意: 机器人的容器 Time Limit: 3000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ... 
- UVA11419 我是SAM
			题意: 给你一个n*m的矩阵,上面有一些格子上有目标,我们可以在格子的外面用枪打目标,一发子弹可以消灭一行或者一列目标,问你最少多少枪能把目标打光,并且输出开枪的位置,题目没说spj(特判) ... 
- 基于路由器的VRRP技术--VRRP的应用
			目录 无Vlan的VRRP 有Vlan的VRRP 今天要讲的VRRP都是基于路由器的VRRP. 一:无Vlan的VRRP 如图,PC1和PC2是企业内网主机,AR1和AR2是企业访问外网的路由器,有一 ... 
- Xposed学习三:基石
			在上一篇我们留下问题:handleLoadPackage如何生效即在何时被执行. 先看XposedBridge.class的main(该函数是在appruntime.start函数中替换原先zygot ... 
- UVA11997求前k个和,多路归并问题
			题意: 给你一个二维矩阵,n*n的,每次从每一行中拿出来一个,然后加起来组成一个和,一共可以得到n^n个和,要求求出这n^n个和中最小的那n个和. 思路: 多路归并问题,先说下多路 ... 
- Win64 驱动内核编程-23.Ring0 InLineHook 和UnHook
			Ring0 InLineHook 和UnHook 如果是要在R0里hook,作者的建议是InLine HOOK,毕竟SSDT HOOK 和 SHADOW SSDT HOOK比较麻烦,不好修改.目前R3 ... 
- 15.PHP_PHP与Ajax
			PHP与Ajax 刚刚下班回来地铁上看的这一章,觉得这东西思路可以.确实解决了WEB的两个大的问题,流量和计算量问题.简单说下我的理解,然后在根据资料整理下学习笔记. 两个问题: 1.展示一个WEB网 ... 
- android The content of the adapter has changed but ListView did not receive a notification 错误的解决方案
			使用了AsyncTask在后台刷新适配器,并且通知ui线程更新ListView,运行时发现时不时的出现 如题 的错误, 导致程序崩溃,解决方法如下: 1.建立一个缓冲数据集,这个数据集就是填充适配器的 ... 
- NSIS制作安装包笔记(一):NSIS介绍、使用NSIS默认向导脚本制作Windows安装包
			前言 做产品时,定制的自定义安装界面常有的,使用NSIS + Qt可以完美的定制基于QT的安装界面,先从纯NSIS开始,制作常规的安装包. 应用程序的发布方式 应用程序发布的时候,具备以下 ... 
- 手把手教你掌握——性能工具Jmeter之参数化(含安装教程 )
			本节大纲 Jmeter 发送get/post请求 Jmeter 之文件参数化-TXT/Csv Jmeter之文件参数化-断言 JMeter简介 Apache JMeter是一款基于JAVA的压力测试T ... 
