在代码里简单设置里一下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吧