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


相关推荐

  • mediumtext_mysql数据类型介绍(含text,longtext,mediumtext说明) | 学步园[通俗易懂]

    mediumtext_mysql数据类型介绍(含text,longtext,mediumtext说明) | 学步园[通俗易懂]由MySQL支持的列类型列在下面。下列代码字母用于描述中:M指出最大的显示尺寸。最大的合法的显示尺寸是255。D适用于浮点类型并且指出跟随在十进制小数点后的数码的数量。最大可能的值是30,但是应该不大于M-2。方括号(“[”和“]”)指出可选的类型修饰符的部分。注意,如果你指定一个了为ZEROFILL,MySQL将为该列自动地增加UNSIGNED属性。TINYINT[(M)][UNSIG…

    2022年5月5日
    598
  • 隐私政策_隐私政策一定要加同意吗

    隐私政策_隐私政策一定要加同意吗隐私政策

    2022年4月20日
    78
  • NSGA2 算法Matlab实现「建议收藏」

    NSGA2 算法Matlab实现「建议收藏」为了能随时了解Matlab主要操作及思想。故本文贴上NSGA-Ⅱ算法Matlab实现(测试函数为ZDT1)。更多内容访问omegaxyz.comNSGA-Ⅱ就是在第一代非支配排序遗传算法的基础上改进而来,其改进主要是针对如上所述的三个方面:①提出了快速非支配排序算法,一方面降低了计算的复杂度,另一方面它将父代种群跟子代种群进行合并,使得下一代的种群从双倍的空间中进行选取,从而保留了

    2022年5月19日
    37
  • sublime4 激活码2021【2021.8最新】

    (sublime4 激活码2021)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html83PVI25FMO-eyJsaWNlbnNlSW…

    2022年3月27日
    76
  • Qt Creator的下载和安装

    Qt Creator的下载和安装Qt和QtCreator的区别Qt是C++的一个库,或者说是开发框架,里面集成了一些库函数,提高开发效率。QtCreator是一个IDE,就是一个平台,一个开发环境,类似的比如说VS,也可以进行Qt开发,当然VS中的Qt是作为一个插件插入VS平台的。下载QtCreator下载地址1:https://www.qt.io/download这是官网下载地址,选择开源opensou…

    2022年5月16日
    38
  • win10环境下不通过cppan编译tesseract4.1动态库[通俗易懂]

    win10环境下不通过cppan编译tesseract4.1动态库[通俗易懂]在我的博客中,写了几篇关于tesseract如何编译Windows环境下的dll库,但那几篇都是基于cppan的环境依赖,而cppan的官方网站在2021年1月已经正式关闭了,因此那种方式将无法下载到对应的依赖环境,根据tesseract官方文档是使用SW的方式进行依赖下载,因此这篇博客将讲解使用基于SW的编译方式。1SW的环境配置在SW官方地址上下载sw.exe。将下载的sw.exe所在路径添加到系统环境变量PATH下。以管理员权限打开cmd,输入命令:swsetup这个命令主要是在用

    2022年9月30日
    0

发表回复

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

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