垃圾的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方法的使用

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

android笔记之ListView的setEmptyView方法

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

ListView与GridView中SetEmptyView方法的使用,及触发条件

我们在使用ListView与GridView组件的时候通常为给用户一个友好的界面提示。在没有数据的时候我们可以给用户一个提示。我们这时候就用到了setEmptyView这个方法, 这个方法。 使用...
  • s932974516
  • s932974516
  • 2016年01月10日 15:00
  • 1248

关于ListView的setEmptyView没效果的问题

使用listView或者gridView时,当列表为空时,有时需要显示一个特殊的empty view来提示用户,一般情况下,如果你是继承ListActivity,只要 TextView tv= new...
  • jys1115
  • jys1115
  • 2015年07月17日 09:55
  • 1236

setEmptyView的一个坑

setEmptyView用来给listview等设置列表为空时展示的view,但这个view有一个前提:这个view必须add到当前的view hierarchy节点里,做法如下: lv = (...
  • My_Luna
  • My_Luna
  • 2016年01月07日 11:04
  • 191

解决ListView列表setEmptyView无效问题及源码解析

很多童鞋们认为ListView的setEmptyView设置空界面无效的。通常在网上查了查,然后来按照网谁上的做法直接复制粘贴一下。效果出来就OK了。身为一个开发者,我们既要知其然,也要知道其所以然。...
  • androidstarjack
  • androidstarjack
  • 2017年03月14日 13:23
  • 2438

RecyclerView添加EmptyView

最近在用RecyclerView的时候,竟然发现它不可以像以前使用listView或者gridView时,当列表为空时,显示一个特殊的empty view来提示用户。没关系,o(^▽^)o,我们可以自...
  • whitley_gong
  • whitley_gong
  • 2016年05月02日 14:46
  • 14545

ListView设置emptyView的限制

最新开发一个应用程序,当ListView为空时需要设置一些View来显示提示内容。我们知道ListView有一个公开的方法——setEmptyView(View v)——用来设置ListView为...
  • ygc87
  • ygc87
  • 2012年12月20日 16:20
  • 23593

解决ListView的 setEmptyView无效的问题

话不多说,直接上代码/** * 设置ListView的EmptyView * setEmptyView * @author Administrator * @param listvie...
  • gentlemanyc
  • gentlemanyc
  • 2015年08月17日 14:02
  • 1881

Android_AdapterView_setEmptyView

当我们使用ListView或GridView的时候,当列表为空的时候,我们往往需要一个Loading或者一段提示文字又或者一个特殊的View来提示用户操作,这个时候就用到了setEmptyView()...
  • strawberry2013
  • strawberry2013
  • 2015年01月26日 13:27
  • 1763
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:垃圾的Android-ListView-setEmptyView
举报原因:
原因补充:

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