Android ListView.setEmptyView

本文详细介绍了Android ListView的setEmptyView()接口,探讨了其在ListView无数据时显示友好提示的使用场景。文章分析了在ListView初始化、设置Adapter和监听网络请求数据返回时设置EmptyView的时间点,并深入解析了EmptyView显示的原理,包括View的可见性切换。同时,文中还提到了EmptyView布局文件和代码实现的不同方式,以及在使用过程中的注意事项。
摘要由CSDN通过智能技术生成

概述

ListView:一个可以垂直滑动的列表视图。
这里写图片描述
这里写图片描述
setEmptyView()接口继承至ListView的父类AdapterView。可想而知,ListView为空时,才会显示EmptyView,这与ListView的数据适配器有间接的联系。

使用场景

List使用非常广泛,用于具有相同数据类型的数据模型显示,也可以自定义List以符合实际的需求。
本文主要介绍List.setEmptyView()接口。使用场景为,当客户端当前显示窗口中显示一个ListView,ListView需要通过Adapter将数据关联到列表上显示出来。这就会出现一个场景,就是当未设置Adapter或Adapter里面的数据为空时,如果给用户一个友好的提示,提升用户体验。
Android官方源码中已经提供了这样的一个接口,通过这个接口,可以在使用ListView的过程中,利用内在的逻辑帮我们实现这个功能,减少代码,让并且是代码更加的清晰,易懂。
实现方式:
EmptyView的添加包括两种方式,一种是在创建布局的时候将EmptyView直接写进去,这种方式的缺点在于缺乏灵活性。另一种是通过代码将创建EmptyView,这种方式相对布局来添加更加具有灵活性,可以自定义EmptyView,动态的修改。当然即便通过布局的方式添加了EmptyView,也可以再次通过代码添加。
1.布局文件实现EmptyView

<ViewGroup
…
<TextView
        android:id="@+id/emptyView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:text="@string/tip_of_empty"
        android:visibility="gone" /></ViewGroup>

2.代码中实现

TextView emptyView = new TextView(context);   
emptyView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));   
emptyView.setText(R.string.tip_of_empty);   
emptyView.setVisibility(View.GONE);   
 ((ViewGroup)list.getParent()).addView(emptyView);   
list.setEmptyView(emptyView);

注:添加EmptyView有一个前提条件,所添加的EmptyView必须存在于ListView的父级容器中,或者说同一个视图树中,才能生效,这涉及到List.setEmptyView()的原理。

时间点

  1. ListView初始化
    当列表初始化的时候,将EmptyView创建出来,添加进ListView中,该时间点会有一个不好的用户体验,就是在给ListView添加数据前,或者网络请求数据未返回前,ListView会隐藏,显示EmptyView,当数据到达并更新ListView后,EmptyView会隐藏,ListView显示,会有一种闪现的效果。不建议在初始化的时间点添加EmptyView.
  2. 设置Adapter
    该时间点设置EmptyView在部分时候会有相同的显示效果,当Adapter为空就关联ListView会和ListView初始化是一样的,当在数据请求完,设置Adapter时,就可以刚好显示当前的数据情况,这就是第三种时间点。
  3. 监听网络请求返回数据
    在获取数据之后添加EmptyView可以恰当的反应当前的状态,也是最佳的使用方式。
    本次
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值