我想为列表视图创建多个空视图,并以编程方式设置它们。 所以我在ListActivity中有一个listview。我的客户想要应用程序的方式,我在应用程序中有一个标题栏,所以布局看起来像这样
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/providerListLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<include
android:id="@+id/headerBar_ref"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
layout="@layout/header_with_dashboard_button" />
<include
android:id="@+id/loadingView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
layout="@layout/loading_view" />
<RelativeLayout
android:id="@+id/listViewWrapper"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_below="@id/headerBar_ref" >
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/headerBar_ref" >
</ListView>
</RelativeLayout>
所以我在单独的xml文件中有2个空视图。在Activity列表中,我尝试设置空视图,如下所示:
RelativeLayout rootLayout = (RelativeLayout) findViewById(R.id.listViewWrapper);
RelativeLayout noFavsLayout = (RelativeLayout) this
.getLayoutInflater().inflate(emptyViewLayoutId,
rootLayout);
getListView().setEmptyView(noFavsLayout);
但是当我这样做时,空视图始终存在。我还尝试使用addContentView()添加视图,但这会占用整个屏幕。我还没能在S / O上找到解决方案
答案 0 :(得分:1)
基于读取http://wiresareobsolete.com/2010/08/adapting-to-empty-views/,显示空视图的实际机制是适配器检查列表是否为空,然后将ListView或空视图的可见性设置为View.GONE,然后将另一个设置为View.VISIBLE。为了使其正常工作,两个视图必须位于同一父视图中。在您的示例中,这意味着类似
<RelativeLayout
android:id="@+id/listViewWrapper"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_below="@id/headerBar_ref" >
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<TextView
android:id="@android:id/empty"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="This list is empty."
/>
</RelativeLayout>
(请注意,我从ListView中删除了&#34; layout_below&#34;它是相对布局中唯一的项目,因此它不需要该引用。此外,视图已添加到XML,您不应该在java中对它进行充气。)
现在,如果您想以编程方式设置不同的空视图(例如在执行搜索之后),您可以将另一个视图添加到您的相对布局中,使用另一个ID(例如noResults)...并发现它&#39 ; s始终显示。
<TextView
android:id="@+id/noResults"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="No results were returned."
/>
因此,在你的onCreate()中,您需要找到该视图并将其可见性设置为已消失。
ListView listView = (ListView)findViewById(android.R.id.list);
View empty = findViewById(android.R.id.empty);
listView.setEmptyView(empty);
View noResults = findViewById(R.id.no_results);
noResults.setVisibility(View.GONE);
然后,每当您更改列表的空视图时,您都希望将另一个视图的可见性设置为GONE,以确保只显示一个。
listView.setEmptyView(noResults);
empty.setVisibility(View.GONE);
我希望这有帮助!