1

我想为列表视图创建多个空视图并以编程方式设置它们。所以我在 ListActivity 中有一个列表视图。我的客户想要应用程序的方式,我在应用程序中有一个标题栏,所以布局看起来像这样

<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 的解决方案

4

1 回答 1

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 中删除了“layout_below”,它是相对布局中的唯一项目,因此不需要该引用。此外,该视图已添加到 XML 中,您不必将其膨胀爪哇。)

现在,如果您想以编程方式设置一个不同的空视图(例如在执行搜索之后),您可以将另一个视图添加到您的相对布局中,使用另一个 id(例如 noResults)......并发现它总是显示。

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

我希望这有帮助!

于 2014-06-27T19:45:26.530 回答