如何在具有多个ListView的活动中为ListView设置空视图?

时间:2011-09-15 01:45:36

标签: android listview user-interface

我在一个Activity中有3个列表堆叠在一起,我想为每个列表设置空视图。我已经尝试将空视图设置为动态创建的视图和布局中定义的视图,但是当列表为空时,无论是否设置了最小高度,它都会将其折叠为0高度。每个列表为60px。

这是空视图的xml定义

<TextView android:id="@+id/empty_view"
        android:layout_width="fill_parent"
        android:layout_height="60px"
        android:text="@string/empty_text"
        />

mListView.setEmptyView(findViewById(R.id.empty_view));

这就是我以编程方式创建文本视图的方式。

mEmptyView = new TextView(this);
mEmptyView.setLayoutParams(new ListView.LayoutParams(60, 60));
mEmptyView.setText(R.string.empty_text);

mListView.setEmptyView(mEmptyView);

1 个答案:

答案 0 :(得分:10)

我的不好,这对我来说非常愚蠢:如果我在xml布局中将TextView随机放置在某个地方然后将其设置为列表的空视图,则会产生相当荒谬的印象,它会神奇地消失,列表为空时重新出现在列表中。我想我认为当它的适配器为空时,列表会将其添加为列表中的一行。即使其他人决定尝试类似的荒谬事情并想知道发生了什么,我也不太可能发布我的原始布局的完整版本以及解决方案。

我用来设置空视图的代码是标准:

mListView.setEmptyView(findViewById(R.id.empty));

然而我的原始布局看起来像这样:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="200sp"
    >
    <TextView android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#FFFFFF"
        android:text="@string/drafts"
        />
    <ListView android:id="@+id/drafts"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:minHeight="60sp"
        />
    <TextView android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:background="#FFFFFF"
        android:text="@string/finished"
        />
    <ListView android:id="@+id/finished"
        android:layout_width="fill_parent"
        android:layout_height="60px"
        android:minHeight="60px"
        />
    <TextView android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#FFFFFF"
        android:text="@string/uploaded"
        />
    <ListView android:id="@+id/uploaded"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:minHeight="60sp"
        />
    <TextView
        android:id="@+id/empty"
        android:text="DUDE WHERE'S MY CAR?"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
/>
</LinearLayout>

虽然我的列表视图的minHeight为60sp,但当列表为空时,高度似乎变为0.同样,我注意到TextView在我的所有三个列表中都可见,所以它似乎没有“消失”并在我的列表中重新出现。多么令人失望!在我的严重疏忽中,为了测试,我将视图设置为仅我的第二个列表的emptyView,确保我的第一个和第二个列表为空,并填充第三个列表。我的第一个列表有它的最小高度,我的第二个列表缩小到0,我的第三个列表被正确填充,我的空视图出现在它下面。我没有尝试填充第二个列表,因此从未意识到空视图随后会消失。

最后花了一个多小时玩动态生成的空视图和诸如此类的东西后,我离开了它一天,今晚回来并测试填充第二个列表。瞧,空洞的景色消失了,灯泡还在继续。我很快测试了移动第二个列表下方和第三个列表上方的空视图,当然,它完美地运行了!

以下是新的工作布局:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="200sp"
    >
    <TextView android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#FFFFFF"
        android:text="@string/drafts"
        />
    <ListView android:id="@+id/drafts"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />
    <TextView android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:background="#FFFFFF"
        android:text="@string/finished"
        />
    <ListView android:id="@+id/finished"
        android:layout_width="fill_parent"
        android:layout_height="60px"
        android:minHeight="60px"
        />
    <TextView
        android:id="@+id/empty"
        android:text="DUDE WHERE'S MY CAR?"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
    />
    <TextView android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#FFFFFF"
        android:text="@string/uploaded"
        />
    <ListView android:id="@+id/uploaded"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />

</LinearLayout>

答案很长,可能只是跟自己说话,但无论如何 - 问这个问题,想出来了,我似乎永远无法在这里回答别人的问题,所以我不得不回答我自己:)