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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • keil5安装教程简单易上手

    keil5安装教程简单易上手keil5安装教程简单易上手首先对于开发ARM系列MCU来说常用MDK来进行开发废话不多说。文章最后含F0-F7系列pcak包链接1.下载keil5安装包(内含pack包)链接:https://pan.baidu.com/s/1wUH3K-0bxkLhKcDaL92X5A提取码:mnjb2.安装keil5(1).下载打开安装内容分别为如下如果没看见破解机请解压里面的key压缩包(2).打开安装包界面如下(3).先勾选协议在点击NEXT(4).建议不要安装系统盘自行

    2022年5月23日
    61
  • 卸载python会删除pip安装的包吗_pip更新软件包

    卸载python会删除pip安装的包吗_pip更新软件包

    2022年10月17日
    0
  • 哈佛幸福课–部分笔记

    哈佛幸福课–部分笔记(仅供参考)灵性超越对宇宙的更高目的和意义有一致的信念,知道自己在大计划中的位置,对生活的意义有信念,能塑造行为并提供安慰。2.公平正义3.诚实勇气4.善良人类5.判断

    2022年7月1日
    20
  • 矩阵等价-相似-合同

    矩阵等价-相似-合同1.矩阵等价2.矩阵相似3.矩阵合同矩阵等价定义如果矩阵A经过有限次初等行变换变成矩阵B,就成矩阵A与B行等价。如果矩阵A经过有限次初等列变换变成矩阵B,就成矩阵A与B列等价。如果矩阵A经过有限次初等变换变成矩阵B,就称矩阵A与B等价。性质反身性:A~A对称性:若AB,则BA传递性:若AB,BC,则A~C推论:有两个m×n阶矩阵A和B,如果这两个矩阵满足B=QAP(P是n×n阶可逆矩阵,Q是m×m阶可逆矩阵),那么这两个矩阵之间是等价关系。r(A)=r(B),且A与B为同型矩阵。

    2022年10月29日
    0
  • c语言爱心代码

    c语言爱心代码#include<stdio.h>intmain(){inti,j,k,l,m;charc=3;//ASCII码里面3就是一个字符小爱心for(i=1;i<=5;i++)printf(“\n”);//开头空出5行for(i=1;i<=3;i++){//前3行中间有空隙分开来写for(j=1;j<=32-2*i;j++)printf(“”);//左边的空格,每下一行左边的空格比上一行少2个//8*n.

    2022年7月26日
    6
  • phpstorm激活码2022(注册激活)

    (phpstorm激活码2022)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月27日
    10.3K

发表回复

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

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