经过多天的搜索和尝试没有成功,我无法弄清楚如何正确使用ListView.setEmptyView
功能。我发现的几乎所有例子都使用ListActivity
,这不是我的情况。我正在使用Activity
以外的其他小部件实现常规ListView
,大致如下图所示:
左侧是普通布局的图片,底部是空视图。 http://picpaste.com/g3926-0UP1wBBB.png
我正在使用以下代码设置空视图(此代码片段写在onCreate
方法中):
mListView.setEmptyView(LayoutInflater.from(this).inflate(
R.layout.emptyview_default,
(ViewGroup) findViewById(R.id.linearlayout1)));
emptyview_default
是一个简单的TextView
:
<merge xmlns:android="...">
<TextView ... />
</merge>
“空视图”始终显示在所有其他小部件的底部,而不是显示在列表内部(通常会显示ListView
视图,如上图所示)。
我还尝试使用ListView
本身(mListView
)作为inflate方法的根ViewGroup
,但应用程序崩溃了。
我期待着建议或任何方向帮助我理解我做错了什么。
答案 0 :(得分:0)
好的,所以不要使用inflate(int, ViewGroup)
(它将返回根布局本身而不是膨胀的视图),而是使用inflate(int, ViewGroup, boolean)
,如下所示:
LayoutInflater i = LayoutInflater.from(this);
ViewGroup root = (ViewGroup) findViewById(R.id.linearlayout1);
View empty = i.inflate(R.layout.emptyview_default, root, false);
mListView.setEmptyView(empty);
问题在于,使用int
和ViewGroup
的inflate方法会将夸大的View
附加到已通过的ViewGroup
,并返回ViewGroup
。如果您使用额外参数来传递false
,ViewGroup
将仅用于为充气LayoutParams
生成View
,但不会将其添加到ViewGroup
。这也会导致inflate()
返回夸大的View
。