ListView设置EmptyView之后不显示

Posted BennuCTech

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ListView设置EmptyView之后不显示相关的知识,希望对你有一定的参考价值。

在代码里简单设置里一下emptyView后发现根本不显示,代码如下:

TextView tv= new TextView(this); 
tv.setText("this is a empty view") 
list.setEmptyView(tv); 

研究发现自己对ListView的Emptyview的理解有误。它并不是添加进ListView中,仅仅是与ListView联动。

怎么理解?我们先看看我们一般如何使用?

布局xml:

<?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:orientation="vertical">

    <ListView
        android:id="@+id/lv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"></ListView>

    <LinearLayout
        android:id="@android:id/empty"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:orientation="vertical">

        ....
    </LinearLayout>

</LinearLayout>

代码:

mLv = (ListView) findViewById(R.id.lv);
mLv.setAdapter(...);
mLv.setEmptyView(findViewById(android.R.id.empty));

所以可以看到,EmptyView必须与ListView同级,也就是说add到ListView的父view下,然后再set给ListView。

ListView会控制它显示或者隐藏即可。其实原理很简单。

那么纯代码怎么办?我们需要手动将它add到ListView的父view下,如下:

TextView emptyView = new TextView(context);
emptyView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
emptyView.setText(This appears when the list is empty”);
emptyView.setVisibility(View.GONE);
((ViewGroup)list.getParent()).addView(emptyView);
list.setEmptyView(emptyView);

这样就可以了,还是很麻烦,所以还是老实写xml吧

关注公众号:BennuCTech,获取更多干货!

以上是关于ListView设置EmptyView之后不显示的主要内容,如果未能解决你的问题,请参考以下文章

判断Listview滑到顶部的最精准方案,解决Listview设置EmptyView与SwipeRefreshLayout冲突

Android ListView.setEmptyView

Android ListView之setEmptyView的问题

为 android ListView 设置空视图不适用于在 Java 中创建的视图

EmptyView 未在 iOS 15、Xcode 13 中显示

Android问题集:SwipeRefreshLayout下拉不显示进度圈