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

我希望ListActivity中的列表视图与页眉和页脚一直显示,即使列表数据是空的。

一个空列表导致空的视图出现,页眉和页脚消失。 不过,我的标题有过滤用户界面,因此应始终可见。

我现在唯一能做的就是如果将页眉和页脚从列表视图中移出来,并在活动布局中将它们作为静态视图实现。 然而,这些总是可见的,只有数据滚动。

我更喜欢这两个只是在滚动列表的顶部和底部。 将其全部包装在滚动视图中不起作用,因为那里有两个嵌套的滚动视图(外部列表视图和包装视图)。

有没有办法做到这一点很好,除了像添加一个假logging黑客?

Solutions Collecting From Web of "列出页眉,页脚和空白全部可见的活动"

让你的空视图包括你的标题。

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

这个答案有点晚,但是你可以直接覆盖BaseAdapter.isEmpty()来返回false。

 public boolean isEmpty() { return false; } 

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

好的,这个解决方法是一个黑客。 但是,不必创造一个假的项目。

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

 myAdapter.add(null); 

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

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

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

而是手动显示/隐藏空白视图:

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

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

在我的情况下,我有两个页眉和页脚的意见。 我把我的mEmptyView放在页脚视图中。

首先,如user1034295 提到的 ,我重写了适配器的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将变得可见。

您可以将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>