1. 介绍
使用 listview、gridview 等列表形式的 view 时,如果后台server返回的数据为空,通常我们需要为页面增加 empty view (俗称空页面),使得页面显示起来更友好,这个时候就用到了 setEmptyView() 方法。
![setEmptyView() 是 AdapterView 中的一个方法,而我们常用到的ExpandableListView, GridView, ListView等都是继承之 AdapterView 的,可以直接调用 setEmptyView() 方法](https://i.loli.net/2019/07/29/5d3e8dd42555511590.png)
![setEmptyView() 官方描述](https://i.loli.net/2019/07/29/5d3e8e1f1472182998.png)
2. 使用方法
下面以一个简单实例的描述 setEmptyview() 的两种常见的使用方法。
方法一
如果页面是继承 ListActivity,只要在布局文件中这样:
1 2 3 4 5 6 7
| ... <ListView android:id="@id/android:list".../> <TextView android:id="@id/android:empty android:text="暂无常用回答哦" .../> ...
|
这样当列表为空时就会自动显示这个 TextView 了。
如果页面不是继承 ListActivity 的话,
1 2 3 4 5 6 7 8 9
| ... <ListView android:id="@+id/list".../> <TextView android:id="@+id/empty android:text="暂无常用回答哦" .../> ... ListView listView = (ListView)findViewById(R.id.list); listView.setEmptyView(findViewById(R.id.empty));
|
方法二
setEmptyView()这个方法是有限制的,这个 empty view 必须在当前的 View hierarchy 的节点上,所以需要把empty view 添加到当前的 View hierarchy 的节点上。布局文件中不作额外配置,在页面中实现如下:
1 2 3 4 5 6
| TextView emptyView = new TextView(activity); emptyView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); emptyView.setText("暂无常用回答哦"); emptyView.setVisibility(View.GONE); ((ViewGroup) list.getParent()).addView(emptyView); list.setEmptyView(emptyView);
|
同理,如果 empty view 不简单是一个 TextView 而是其他一个较复杂的自定义 View,则可以通过 inflate:
1 2 3 4
| View emptyView = View.inflate(R.layout.empty_view, null); emptyView.setVisibility(View.GONE); ((ViewGroup) list.getParent()).addView(emptyView); list.setEmptyView(emptyView);
|
3. 尾巴
ViewStub 在很多时候也是可以实现我们空页面的需求,在页面中的数据不是动态变化的情况下,使用 ViewStub 也是不错的选择。