Android:ListView&#39的setEmptyView正确定位

时间:2014-07-24 10:59:26

标签: android listview android-listview

我试图为ListView提供一个emptyView,我也希望以编程方式(或从单独的布局资源文件)添加它,因为我不想在我的布局文件。到目前为止,我只有在添加

时才能显示它
        emptyList.setVisibility(View.GONE);
        ((ViewGroup)list.getParent()).addView(emptyList);

在我的代码中,这不是很好但似乎是必要的。问题是emptyView的定位。如果我在整个布局中不仅仅有ListView,那么emptyView不会位于ListView显示区域内。我想这是设计的。

正确定位视图的最佳方法是什么?我可以在代码中实现这一点吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

试试这个:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ListView ... />

    <include
      android:id="@+id/empty_view"
      android:layout_width="match_parent"
      android:layout_height="match_parent" />        
</RelativeLayout>

如果您将empty viewRelativeLayout放在一起ListView并在ListView之后创建ListView,则visible覆盖{{1}} {{1}} {{1}} {1}}。

答案 1 :(得分:0)

布局中的空视图定位由开发人员100%完成。是的,这是设计,Android通常倾向于灵活性而不是编码。

如果你查看AdapterView source code,我会看到我在说什么,在第737行附近你会看到这个

mEmptyView.setVisibility(View.VISIBLE);

和这个

if (mEmptyView != null) mEmptyView.setVisibility(View.GONE);

这意味着,ListView对您正在传递的emptyView对象所做的一切就是在其上调用setVisibility(boolean)

所以,现在我们知道它只是一个正常的布局,没有特殊的处理,它更容易处理它。如果你不想一次又一次地在你的布局上写入相同的XML用于空视图,你可以(应该)有一个只有空视图的empty_view.xml,并且在你的每个XML中都有你定位的列表使用<include>标记的empty_view.xml。像这样:http://developer.android.com/training/improving-layouts/reusing-layouts.html以及您只需调用的代码:

listview.setEmptyView(root.findViewById(R.id.empty_view));

或者您可以通过代码仍然可以...但这将涉及为&#34;父母&#34;设置布局参数。妥善组织它。

希望它有所帮助。