如何处理需要填充的数据为空的情况?
ListView及其他继承自AdapterView的类都有一个简便的处理这种情况的方法:setEmptyView(View)。
当ListView的Adapter为空或者Adapter的isEmpty()方法返回true的时候,它将会把设置的emptyview绘制出来。
举个例子,假设我们需要创建一个应用来管理我们的待办事项,我们的主页面将会是一个用来展示这些待办事项的ListView。
而当我们第一次载入进这个应用时,待办事项必然为空。此时我们就可以利用一个图片或者一段描述性的话来表达“无待办事项”。
看看XML布局文件:
再来看自定义的drawable/empty_view文件:
是一个自定义的shape,当ListView没数据的时候才展现出来。
最后再看MainActivity文件:
public class MainActivity extends Activity { private ListView mListView; @Override public void onCreate (Bundle savedInstanceState ) { super. onCreate( savedInstanceState ); setContentView (R .layout .main ); mListView = (ListView ) findViewById (R .id .my_list_view ); mListView. setEmptyView (findViewById (R .id .empty_view )); /*String[] strs=new String[]{"1","2"}; ArrayAdapteradapter=new ArrayAdapter (this, android.R.layout.simple_list_item_1,strs); mListView.setAdapter(adapter);*/ }}
仅仅创建一个ListView并设置了EmptyView为main.xml中创建的ImageView。注释内的代码用来测试当ListView有数据时,emptyview会不会显示。
当然,你可以利用ViewStub来作为EmptyView,利用ViewStub可以延迟加载视图,确保在不需要显示EmptyView的时候它不会被渲染。关于ViewStub的用法,我在之前的博文《延迟加载和避免重复加载》已进行过叙述。