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


相关推荐

  • Precision,Recall,F1score,Accuracy的理解

    Precision,Recall,F1score,Accuracy的理解Precision,Recall,F1score,Accuracy四个概念容易混淆,这里做一下解释。假设一个二分类问题,样本有正负两个类别。那么模型预测的结果和真实标签的组合就有4种:TP,FP,FN,TN,如下图所示。这4个分别表示:实际为正样本你预测为正样本,实际为负样本你预测为正样本,实际为正样本你预测为负样本,实际为负样本你预测为负样本。那么Precision和Recall表示什么意思?一般

    2022年10月14日
    2
  • google maps api_js调用谷歌浏览器接口

    google maps api_js调用谷歌浏览器接口一:基本知识:1.使用谷歌地图API的第一步就是要注册一个API密钥,需要注重一下两点:1.假如使用API的页面还没有发布,只是在本地调试,可以不用密钥,随便用个字符串代替就可以了。

    2022年8月6日
    11
  • 亿图图示mac版激活码 csdn(JetBrains全家桶)2022.01.24

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

    2022年3月31日
    270
  • .pkl文件读取_pkl是什么文件格式

    .pkl文件读取_pkl是什么文件格式1.根据网上查阅的读取方法importpicklefile=open(“./dataset-cornell-length10-filter1-vocabSize40000.pkl”,”rb”)data=pickle.load(file)print(data)file.close()在这里,注意在读取的使用的是”rb”,也就是二进制文件格式,而”r”是普通格式的读取用print输…

    2025年10月17日
    7
  • pycharm汉化包下载[通俗易懂]

    pycharm汉化包下载[通俗易懂]把解压后的文件放到pycharm安装目录lib文件夹下即可链接:https://pan.baidu.com/s/126-yg7ojwwryywBzUuVEhQ提取码:v5j0

    2022年5月9日
    38
  • DB2 DECODE函数

    DB2 DECODE函数DB2DECODE函数的用法:在查询数据,需要进行条件判断时,一般我们使用CASE…WHEN实现,当判断条件为相等时,除了使用CASE…WHEN实现,还可以使用DECODE函数。若要使用like、>、DECODE()使用方法: decode(条件,值1,翻译值1,值2,翻译值2,…值n,翻译值n,缺省值)DECODE()含义说明:IF条件=值1THEN

    2022年7月25日
    37

发表回复

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

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