如何在Android的ListView小部件上正确使用空视图

时间:2013-05-22 17:22:13

标签: android android-layout android-listview

经过多天的搜索和尝试没有成功,我无法弄清楚如何正确使用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,但应用程序崩溃了。

我期待着建议或任何方向帮助我理解我做错了什么。

1 个答案:

答案 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);

问题在于,使用intViewGroup的inflate方法会将夸大的View附加到已通过的ViewGroup,并返回ViewGroup 。如果您使用额外参数来传递falseViewGroup将仅用于为充气LayoutParams生成View,但不会将其添加到ViewGroup。这也会导致inflate()返回夸大的View