Android ListView等列表设置空布局

Android ListView等列表设置空布局在Android平台上,listView是特别常用的组件之一,我们在向用户展示列表数据时,通常要考虑:列表有数据和无数据空的状态,因为网络环境各异,难免刷新失败什么的;在此之前我是使用ViewStub来实现,通过判断listview列表数据是否为空来设置ViewStub的隐藏和显示,或者设置lIstview的显示或隐藏;但是,对ViewStub不是特别的了解,把控不好,只是控

大家好,又见面了,我是你们的朋友全栈君。

在Android平台上,listView 是特别常用的组件之一,我们在向用户展示列表数据时,通常要考虑: 列表有数据和无数据空的状态,因为网络环境各异,难免刷新失败什么的;

在此之前我是使用ViewStub来实现,通过判断listview列表数据是否为空来设置ViewStub的隐藏和显示,或者设置lIstview的显示或隐藏;

但是,对ViewStub不是特别的了解,把控不好,只是控制其显示和隐藏,如果对其设置点击刷新数据等交互时,会遇到找不到id等报出NULL的异常;

今天忽然发现一个简单地方法,可以轻松搞定这个小需求.(android listview空布局刷新数据:列表无数据时显示数据加载失败的提示,并且点击提示,刷新数据);

 我们来看一下ListView的继承关系,

ListView extends AbsListView

AbsListView extends AdapterView

这个AdapterView抽象类,有一个方法,我们可以很清楚地看到这个方法就是为在列表适配器为空时要显示的View;

Android系统已经为我们写好的方法,我们没有理由不用,也没有必要重复造轮子;拿来直接用

/**  * Sets the view to show if the adapter is empty  */ @android.view.RemotableViewMethod
public void setEmptyView(View emptyView) {
    mEmptyView = emptyView;

    // If not explicitly specified this view is important for accessibility.     if (emptyView != null             && emptyView.getImportantForAccessibility() == IMPORTANT_FOR_ACCESSIBILITY_AUTO) {
        emptyView.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES);
    }

    final T adapter = getAdapter();
    final boolean empty = ((adapter == null) || adapter.isEmpty());
    updateEmptyStatus(empty);
}

很简单,我们来看一下Demod的代码片段简单地使用.

@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    listView = (ListView) findViewById(R.id.listview);    textView = (TextView) findViewById(R.id.textView);    listView.setEmptyView(textView);//添加引用    adapter = new MyAdapter();    listView.setAdapter(adapter);    textView.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            if (adapter.getCount() == 0) {                adapter.setCount(1);                adapter.notifyDataSetChanged();            }        }    });}

就是这么简单;

再来看看布局,不论你的布局是不是FrameLayout,都可以做到.listview有数据要显示时,textview不显示.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="horizontal"
    tools:context=".MainActivity">

    <ListView
        android:id="@+id/listview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:descendantFocusability="afterDescendants"
        android:visibility="gone"
        android:focusable="true" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:text="没有数据哦,点我刷新"
        android:textColor="@android:color/background_dark"
        android:textSize="14dp"
        android:textStyle="bold"
        android:layout_gravity="center" />
</LinearLayout>

后记:  

空布局需要和listview放同一个布局, 这个点我们看源代码实现方法也是让他们交换显示的参数,而不是添加或者删除组件视图.

小技巧,大用途.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163291.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • navicat激活码最新【2021.8最新】

    (navicat激活码最新)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月26日
  • 简述SOAP协议「建议收藏」

    简述SOAP协议「建议收藏」8个月过去了,依旧清楚的记得研究生复试时,老师问我SOAP协议是啥(当时还不知道这个协议的名字到底该怎么写),今天偶然之间看见了一篇博客提到了SOAP(见下图),于是就查了一下SOAP协议。SOAP是基于XML的简易协议,可使应用程序在HTTP之上进行信息交换。更简单地说:SOAP是用于访问网络服务的协议。什么是SOAP?SOAP指简易对象访问协议SOAP是一种…

    2022年7月27日
  • 服务器支持p2v,菜鸟必知 实施P2V迁移成功的五大秘诀

    服务器支持p2v,菜鸟必知 实施P2V迁移成功的五大秘诀虚拟服务器迁移工具对操作系统、应用和设置进行镜像复制,并转换成虚拟硬盘文件(适用于MicrosoftHyper-V和CitrixXenServer来说)或者虚拟机磁盘格式文件(适用于VMware)。然后P2V转换工具自动诸如虚拟硬件驱动,并启动虚拟机运转起来。多数P2V迁移直截了当,但也会偶尔发生问题。下面,GregShields将分享五条让P2V迁移成功的技巧。一、注意已安装的OEM系统当…

    2022年7月26日
  • mysql之模糊查询的方法

    mysql之模糊查询的方法想起Mysql模糊查询正常情况下我们想到的一般都是like,但是使用like,格式正确了效率很快,当然这是在数据量比较小的情况下,问题是在数据量小的时候,不容易看出查询的效率,但在数据量达到百万级,千万级的时mysql查询的效率是很关键的,也是很重要的。一、一般情况下like模糊查询的写法:这个SQL语句,如果用explain解释的话,我们很容易就能发觉它是没有走索引搜索,而是对…

    2022年5月30日
  • CentOS7使用firewalld打开关闭防火墙与端口

    CentOS7使用firewalld打开关闭防火墙与端口

    2021年10月18日
  • WeakHashMap,源码解读[通俗易懂]

    WeakHashMap,源码解读[通俗易懂]概述WeakHashMap也是Map接口的一个实现类,它与HashMap相似,也是一个哈希表,存储key-valuepair,而且也是非线程安全的。不过WeakHashMap并没有引入红黑树来尽量规避哈希冲突带来的影响,内部实现只是数组+单链表。此外,WeakHashMap与HashMap最大的不同之处在于,WeakHashMap的key是“弱键”(weakkeys),即当一个key不再正…

    2022年5月31日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号