我希望ListActivity中的列表视图一直显示,即使列表数据为空,页眉和页脚仍然可见。
空列表会显示空视图,页眉和页脚会消失。但是我的标题有过滤UI,因此应始终可见。
我现在能够实现这一目标的唯一方法是,如果我从列表视图中取出页眉和页脚,并将其作为活动布局外部的静态视图实现。然而,这些始终是可见的,只有数据滚动。
我更希望两者都在滚动列表的顶部和底部。将它全部包装在滚动视图中不起作用,因为那时有两个嵌套的滚动视图(列表视图在外面,包装一个)。
除了像添加假记录之类的黑客之外,有没有办法做得很好?
答案 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);
}
mEmptyView
是ListView
页脚视图中的孩子。
因此,当您的列表变为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>