技巧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