列出具有页眉,页脚和空白全部可见的活动

时间:2011-09-16 19:35:49

标签: android listview

我希望ListActivity中的列表视图一直显示,即使列表数据为空,页眉和页脚仍然可见。

空列表会显示空视图,页眉和页脚会消失。但是我的标题有过滤UI,因此应始终可见。

我现在能够实现这一目标的唯一方法是,如果我从列表视图中取出页眉和页脚,并将其作为活动布局外部的静态视图实现。然而,这些始终是可见的,只有数据滚动。

我更希望两者都在滚动列表的顶部和底部。将它全部包装在滚动视图中不起作用,因为那时有两个嵌套的滚动视图(列表视图在外面,包装一个)。

除了像添加假记录之类的黑客之外,有没有办法做得很好?

8 个答案:

答案 0 :(得分:16)

让您的空视图包含标题。

 <ListView />
 <RelativeLayout
    android:id="@android:id/empty"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
       // Add whatever you want here including your header
 </RelativeLayout>

答案 1 :(得分:14)

这个答案有点晚了,但您可以简单地覆盖BaseAdapter.isEmpty()以返回false。

public boolean isEmpty() {
    return false;
}

答案 2 :(得分:3)

您可以使用我的MergeAdapter。添加标题视图,添加数据适配器,然后添加页脚视图。它们将全部滚动,即使中间的适配器没有行,页眉和页脚也会保持不变。

答案 3 :(得分:2)

好的,这个解决方法是一个黑客。但是,无需创建假物品。

对于ArrayAdapter,您可以添加一个空项...即

myAdapter.add(null);

并且,在MyAdapter getView(..)中,您可以执行以下操作:

myItem = getItem(position);
if (myItem == null) {
   return getLayoutInflater().inflate(R.layout.my_empty_row, null);
} else {
...
}

答案 4 :(得分:1)

如果您不调用ListView.setEmptyView,我发现页眉/页脚始终可见。

相反,请手动显示/隐藏空视图:

emptyView.setVisibility(list.size() == 0 ? View.VISIBLE : View.GONE);

答案 5 :(得分:1)

我遇到同样的问题,如果ListView没有项目,你可以使用ListView.setAdapter(new SomeAdapter(new ArrayList()));标题也可见。

答案 6 :(得分:1)

在我的情况下,我有页眉和页脚视图。 我将mEmptyView置于页脚视图中。

首先,作为user1034295 mentioned,我覆盖了适配器的isEmpty()方法:

@Override
public boolean isEmpty() {
// If not overridden, then this will return `true` if your list is empty
// Thus, you won't see header/footer views
   return false;
}

ExpandableListView适配器的getGroupCount()。覆盖适配器的适当方法。

@Override
public int getGroupCount() {
    int size = null != mData ? mData.size() : 0;
    if (0 == size) mHostFragment.toggleEmptyView(true);
    else mHostFragment.toggleEmptyView(false);
    return size;
}

在你的活动/片段

public void toggleEmptyView(boolean show) {
    if(show && mEmptyView.getVisibility() != View.VISIBLE)
        mEmptyView.setVisibility(View.VISIBLE);
    else if (!show && mEmptyView.getVisibility() != View.GONE)
        mEmptyView.setVisibility(View.GONE);
}

mEmptyViewListView页脚视图中的孩子。 因此,当您的列表变为0大小时,您将获得页眉/页脚视图保持+ mEmptyView将变为可见。

答案 7 :(得分:0)

您可以将listView和空布局放在FrameLayout中,然后放入 在标题大小的空布局边距,然后,您可以在项目添加到列表视图时更改空视图的可见性。

布局将与此类似:

<FrameLayout
    android:layout_width="wrap_content"
    android:layout_height="0dp"
    android:layout_weight="1">

    <ListView
        android:id="@+id/myListView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        tools:listheader="@layout/myHeader"/>

    <LinearLayout
        android:layout_marginTop="@dimen/headerHeight"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white"
        android:id="@+id/emptyLayout">

       //insert your layout here

    </LinearLayout>

</FrameLayout>