垃圾的Android-ListView-setEmptyView

原创 2017年01月04日 14:03:44

我们知道ListView组件提供了一个空数据是的视图设置方法setEmptyView,该方法存在一个诟病,就是空视图和listview组件要在一个Parent中,这个就不在此细说,下面说另一个问题,原因其实和前面那个问题同出一辙。

假如emptyView和listview在布局中,已经属于同一个parent,设置EmptyView的代码如下

    private void setEmptyView(){
        emptyTv.setText(getString(R.string.txt_no_data_refreshable));
        mList.setEmptyView(empty);
    }
假如没有数据,运行,一切正常。

下面我们执行一句代码后

        mList.setVisibility(View.VISIBLE);
我们发现,emptyView看不到了,奇怪!

我们来看一下listview的setEmptyView的代码

    public void setEmptyView(View emptyView) {
        mEmptyView = emptyView;

        // If not explicitly specified this view is important for accessibility.
        if (emptyView != null
                && emptyView.getImportantForAccessibility() == IMPORTANT_FOR_ACCESSIBILITY_AUTO) {
            emptyView.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES);
        }

        final T adapter = getAdapter();
        final boolean empty = ((adapter == null) || adapter.isEmpty());
        updateEmptyStatus(empty);
    }
其中重点看updateEmptyStatus的源码

    private void updateEmptyStatus(boolean empty) {
        if (isInFilterMode()) {
            empty = false;
        }

        if (empty) {
            if (mEmptyView != null) {
                mEmptyView.setVisibility(View.VISIBLE);
                setVisibility(View.GONE);
            } else {
                setVisibility(View.VISIBLE);
            }
            if (mDataChanged) {           
                this.onLayout(false, mLeft, mTop, mRight, mBottom); 
            }
        } else {
            if (mEmptyView != null) mEmptyView.setVisibility(View.GONE);
            setVisibility(View.VISIBLE);
        }
    }

我们发现,控制emptyView的显示,就是隐藏listview,这两个试图互相隐藏显示,来达到效果,而且updateEmptyStatus方法只有在listview的setEmptyView时才会执行,所以当你执行mList.setVisibility(View.VISIBLE)的时候,listview被设置为可见,它覆盖了emptyView,所以你看不到,如果想显示emptyView,那就再执行一遍setEmptyView方法。
版权声明:本文为博主原创文章,未经博主允许不得转载。

android笔记之ListView的setEmptyView方法

在ListView数据为空或者Adapter为空的时候,通常需要显示一个提示视图。一种办法是在ListView同样的位置放置一个同样大小的提示视图,通过代码控制该视图和ListView的隐藏、显示来解...

Android ListView之setEmptyView的问题

使用listView或者gridView时,当列表为空时,有时需要显示一个特殊的empty view来提示用户,一般情况下,如果你是继承ListActivity,只要      当列表为空时就会自动显...
  • jdsjlzx
  • jdsjlzx
  • 2015年01月26日 11:20
  • 7149

ListView之EmptyView

关键字: ListView EmptyView setEmptyView 最新开发一个应用程序,需要用到当ListView为空时设置一些View来显示提示内容。我们已经知道ListView有一个公开...

Android ListView setEmptyView

http://my.eoe.cn/yaming/archive/879.html 1 当我们使用ListView或GridView的时候,当列...
  • Hknock
  • Hknock
  • 2014年01月09日 18:08
  • 20351

Android ListView的setEmptyView方法的使用

在Android开发中,经常会用到ListView显示数据,但是当ListView中没有数据的时候,如果显示一片空白,对用户来说是个不太好的体验,我们可以在ListView中没数据的时候给用户一个提示...

[Android] 快速实现一个通用EmptyView

好的APP应当具备良好的交互, 最好能贴心的满足用户的需求. 而人性化的提醒就是其中之一. 某些APP中经常会看到这样的场景, 当加载内容失败, 或者获取内容失败时, 界面会变成一个可与用后交互的场景...
  • stzy00
  • stzy00
  • 2015年08月18日 22:14
  • 1359

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

空列表empty listview显示提示信息

1:普通listview很简单,只要在xml中添加提示的布局代码,并在代码中使用setEmptyView就可以了.不需要自己判断列表是空与否 1 2 3 4 5 6 7 8 9 10 11 ...

c#.net4复杂json读取

在写软件的时候,遇到负责的json字符串,需要反序列化,方便读取,我的想法是能反序列成jsonview一样的效果。 下面一步一步来操作 一:我的json数据字符串如下: {"auction_...
  • wyw308
  • wyw308
  • 2012年03月27日 14:57
  • 6897

搭建OpenGIS平台

第七章.搭建OpenGIS平台 基于OpenGIS的地图服务就可以供网上任何能够发现它们的应用程序调用,甚至可以被其他的Web服务调用。利用Web服务技术,可以很好地实现服务在Internet层...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:垃圾的Android-ListView-setEmptyView
举报原因:
原因补充:

(最多只允许输入30个字)