我试图为ListView
提供一个emptyView,我也希望以编程方式(或从单独的布局资源文件)添加它,因为我不想在我的布局文件。到目前为止,我只有在添加
emptyList.setVisibility(View.GONE);
((ViewGroup)list.getParent()).addView(emptyList);
在我的代码中,这不是很好但似乎是必要的。问题是emptyView的定位。如果我在整个布局中不仅仅有ListView
,那么emptyView不会位于ListView
显示区域内。我想这是设计的。
正确定位视图的最佳方法是什么?我可以在代码中实现这一点吗?
谢谢!
答案 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 view
与RelativeLayout
放在一起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;设置布局参数。妥善组织它。
希望它有所帮助。