相当于 RecyclerView 中的 ListView.setEmptyView

2024-01-08

In RecyclerView,我想设置一个空视图,当适配器为空时显示。是否有相当于ListView.setEmptyView() http://developer.android.com/reference/android/widget/AdapterView.html#setEmptyView(android.view.View)?


这是一个类似于@dragonborn 的类,但更完整。基于这个要点 https://gist.github.com/adelnizamutdinov/31c8f054d1af4588dc5c.

public class EmptyRecyclerView extends RecyclerView {
    private View emptyView;
    final private AdapterDataObserver observer = new AdapterDataObserver() {
        @Override
        public void onChanged() {
            checkIfEmpty();
        }

        @Override
        public void onItemRangeInserted(int positionStart, int itemCount) {
            checkIfEmpty();
        }

        @Override
        public void onItemRangeRemoved(int positionStart, int itemCount) {
            checkIfEmpty();
        }
    };

    public EmptyRecyclerView(Context context) {
        super(context);
    }

    public EmptyRecyclerView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public EmptyRecyclerView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    void checkIfEmpty() {
        if (emptyView != null && getAdapter() != null) {
            final boolean emptyViewVisible = getAdapter().getItemCount() == 0;
            emptyView.setVisibility(emptyViewVisible ? VISIBLE : GONE);
            setVisibility(emptyViewVisible ? GONE : VISIBLE);
        }
    }

    @Override
    public void setAdapter(Adapter adapter) {
        final Adapter oldAdapter = getAdapter();
        if (oldAdapter != null) {
            oldAdapter.unregisterAdapterDataObserver(observer);
        }
        super.setAdapter(adapter);
        if (adapter != null) {
            adapter.registerAdapterDataObserver(observer);
        }

        checkIfEmpty();
    }

    public void setEmptyView(View emptyView) {
        this.emptyView = emptyView;
        checkIfEmpty();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

相当于 RecyclerView 中的 ListView.setEmptyView 的相关文章

随机推荐

  • emacs 使用大纲次要模式折叠类中的函数

    我应该使用什么样的钩子来折叠类中的函数 我想查看类中函数的轮廓 但如果我挂钩隐藏 则所有内容 包括类 都会在打开过程中折叠 这个小片段对我有用 但是 您可能希望限制哪些文件启用了大纲模式 注释掉的可以自定义when声明这样做 并添加适当的右
  • 使用Qt播放特定的系统声音

    我希望我的应用程序发出标准的通知声音 即 Windows 上称为 默认蜂鸣声 的声音 我没有看到使用 QSound 引用系统声音的方法 没有分配声音的 QSound 实例用于播放此声音 但它在 Qt 5 中已修复 有什么方法可以做到吗 如果
  • 使用 Wopi 和 Office Online Server 在 Word 中编辑

    我正在开发一个项目 我们用Word 实现了内容管理 我们有一些正在使用 OpenXML 处理的 Word 文件 用户可以通过两种方式打开这些文件 下载副本或在线编辑 在线编辑是使用 Office Online Server 和自定义 Wop
  • 是否可以捕获window.location.replace事件?

    如果我当前位于该 URL example com somepage somehash 我调用window location hash anotherhash 网址更改为 example com somepage anotherhash 这会
  • Haskell 中具有运算符优先级和关联性的漂亮打印语法树

    是否有任何常用的方法 甚至是一个库 可以用 二元 运算符漂亮地打印 和解析 语法树 这些运算符具有关联性和优先级 以便结果使用尽可能少的括号 以命题演算的公式为例 data Formula Atom String Not Formula A
  • 如何使用 Tomcat 在其 URL 中隐藏应用程序上下文?

    我有许多应用程序在 Tomcat 中运行 每个人都有自己的背景 我使用 Apache HTTP Server 将它们全部连接到不同的域名 并且mod jk 请参阅此问题的更多详细信息 如何使用 mod jk 挂载上下文引用的 Tomcat
  • Typescript:获取未定义的值

    我好像有一个问题无法解决 我希望 dialogTitle 变量也与标题变量一起显示 startHour 和 startMinute 变量 然而 我似乎在标题后得到了标题和 未定义 两次 我应该怎么办 事件表单 component ts im
  • 在 MVC 5 的操作过滤器中调用异步方法

    我正在编写一个动作过滤器 继承自ActionFilterAttribute 它使用HttpClient将数据 POST 到外部服务器OnResultExecuted方法 HttpClient有方法PostAsync返回一个可等待的Task
  • Xamarin Forms CollectionView:无法为 SelectedItem 提供透明背景

    我正在使用 CollectionView 当用户选择一个项目时 我根本不希望 SelectedItem 显示背景颜色 我尝试按照 Xamarin 文档中的说明 通过使用 VisualStateManager 将 BackgroundColo
  • 如何用react-native绘制梯形/梯形?

    这是 id 处的 css 代码 效果很好 border bottom 100px solid 0000ff80 border right 50px solid transparent height 0 width 100px div div
  • Python - 属性错误“_io.TextIOWrapper”对象没有属性“open”

    我收到错误 File open classname txt a AttributeError io TextIOWrapper object has no attribute open 尝试打开文件时 我需要打开文件并将分数写入文件 这是代
  • R 中的数据操作:“X”必须是原子的

    我使用以下命令导入了一个在多列中包含标题和数字的文件 irs data lt read csv file 10incyallnoagi csv 我想将 1 列中的值除以另一列中的值 然后确定最高的 3 个值 salary var lt c
  • Google Orgchart 创造婚姻

    嗨 我正在使用Google Orgchart https developers google com chart interactive docs gallery orgchart hl da Example创建一个家谱 我将三个家庭组合在
  • 如何使用 PHP api 从 Dropbox 删除文件

    首先 我可以使用 PHP api 正确地从 Dropbox 上传和下载文件 这是我上传文件的方式 Upload files file fopen default png rb size filesize default png client
  • Rails - 使用布局对所有电子邮件使用相同的附件

    我可能遗漏了一些明显的东西 但我有一个徽标 我想将其包含在从我的应用程序发送的所有电子邮件中 我有一个用于所有这些邮件的主布局 我认为有一种方法可以使其保持干燥 而不必在每个邮件程序方法中添加代码行来附加文件 有人可以指出我正确的方向或纠正
  • 为什么在删除所有侦听器后我的 Node.js 进程没有终止?

    在下面的代码中 我为data的事件process stdin与once method console log Press Enter to allow process to terminate process stdin once data
  • 找不到 C/C++ IntelliJ IDEA 插件

    我正在尝试添加一个到IntelliJ IDEA 所以我去插件并搜索它但找不到它 他们是否删除了它并用新的 IDE cLion 替换了它 是不再支持还是什么 看起来您的 IntelliJ IDEA 版本比 C C 插件支持的版本新 如果你看一
  • 在每句之前打印项目符号 + 每句之后换行 SQL

    我有这样的文字 第一句 第二句 第三句 我希望它是 句子一 第二句 第三句 我想我可以替换 with char 10 char 13 但是我该如何处理子弹呢 如果手动打印 字符效果很好 我只是不知道如何为每个句子添加项目符号 包括第一个句子
  • Wicket 与 GWT - 需要建议

    我正在开发一个基于 Java EE 的 Web 应用程序 我们的时间非常有限 无法提出 alpha 版本并尝试决定要使用的 Web 框架 它必须是易于学习但功能强大的东西 由于开发需要时间 标准 JSP Servlet 在这里不是一个选择
  • 相当于 RecyclerView 中的 ListView.setEmptyView

    In RecyclerView 我想设置一个空视图 当适配器为空时显示 是否有相当于ListView setEmptyView http developer android com reference android widget Adap