导航

技巧24:如何处理空列表的显示

Posted on 2013-10-08 17:12  Sharp陈响  阅读(1439)  评论(3编辑  收藏  举报

技巧24:如何处理空列表的显示

    向移动客户展示数据最常用的方式就是使用list,当我们使用list的时候我们需要处理两件事:一个是列表充满的情况,一个是列表为空的状况(其实是当列表为空的时候显示什么),但是怎么处理列表为空的状态呢?幸运的是我们有一个很简单的方式来处理。

    从AdapterView继承而来的类中有一个简单的处理空列表的方法是通过方法setEmptyView(View)。当要绘制AdapterView的时候,如果Adapter是null或者Adapter的isEmpty()的方法返回true那么就会绘制空视图。

    下面是一个简单的例子,比如我们需要一个应用来处理我们的TODO list,我们的主界面是一个ListView,这个ListView负责维护我们所有的TODO项目,但是当我们第一次显示它的时候,列表是空的。当列表为空的时候,我们需要使用下面的xml绘制一个漂亮的图片。

 

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent" >

 

    <ListView

        android:id="@+id/list_view"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent" />

 

    <ImageView

        android:id="@+id/empty_view"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        android:src="@drawable/empty_view" />

 

</FrameLayout>

    我们接下来要做的就是在onCreate()中得到ListView然后用上面的layout显示空列表。下面是我们使用的代码:

@Override

public void onCreate(Bundle savedInstanceState) {

         super.onCreate(savedInstanceState);

         setContentView(R.layout.main);

         ListView mListView = (ListView) findViewById(R.id.list_view);

         mListView.setEmptyView(findViewById(R.id.empty_view));

}

 

    因为我们没给ListView指定Adapter所以我们运行这段代码的时候,列表就是空的,就会显示ImageView。

24.1重点

    我不得不承认我最近才学会这个技巧。当adapter为空的时候ListView是一个隐藏的状态(invisible不是gone),当使用setEmpty(View)方法,使代码兼容性更好,也更容易阅读。

  修正:上句中以前是“我们不得不承认我最近才学会这个技巧”->"我不得不承认我最近才学会这个技巧"

    当然了你也可以试试使用ViewStub作为一个空view,与上面不同的是在不需要ViewStub不被需要的时候它不会被渲染。

关于ViewStub参见:

http://blog.csdn.net/hitlion2008/article/details/6737537

源代码下载:

https://github.com/Macarse/50AH-code