Android 列出所有可见的页眉、页脚和空的活动
我希望ListActivity中的listview显示时,页眉和页脚始终可见,即使列表数据为空 空列表会导致出现空视图,并且页眉和页脚会消失。但是,我的标题有过滤UI,因此应该始终可见 目前我唯一能做到这一点的方法是,将页眉和页脚从listview中取出,并在活动布局外部将它们作为静态视图实现。但是,这些始终可见,只有数据滚动 我更愿意两者都在滚动列表的顶部和底部。在一个滚动视图中包装所有内容不起作用,因为有两个嵌套的滚动视图(外部的列表视图和包装视图)Android 列出所有可见的页眉、页脚和空的活动,android,listview,Android,Listview,我希望ListActivity中的listview显示时,页眉和页脚始终可见,即使列表数据为空 空列表会导致出现空视图,并且页眉和页脚会消失。但是,我的标题有过滤UI,因此应该始终可见 目前我唯一能做到这一点的方法是,将页眉和页脚从listview中取出,并在活动布局外部将它们作为静态视图实现。但是,这些始终可见,只有数据滚动 我更愿意两者都在滚动列表的顶部和底部。在一个滚动视图中包装所有内容不起作用,因为有两个嵌套的滚动视图(外部的列表视图和包装视图) 除了像添加假唱片这样的黑客攻击之外,还有
除了像添加假唱片这样的黑客攻击之外,还有什么方法可以很好地做到这一点吗 你可以用我的。添加页眉视图、数据适配器和页脚视图。它们将全部一致滚动,页眉和页脚将保持不变,即使中间的适配器没有行。 < P> OK,此解决方案是一个黑客攻击。但是,不必创建假项目 对于ArrayAdapter,可以添加空项。。。i、 e
myAdapter.add(null);
在MyAdapter getView(..)中,您可以执行以下操作:
myItem = getItem(position);
if (myItem == null) {
return getLayoutInflater().inflate(R.layout.my_empty_row, null);
} else {
...
}
使空视图包含标题 i、 e
//在此处添加您想要的内容,包括标题
我发现,如果不调用ListView.setEmptyView,页眉/页脚将始终可见
而是手动显示/隐藏空视图:
emptyView.setVisibility(list.size() == 0 ? View.VISIBLE : View.GONE);
这个答案有点晚,但您可以简单地重写BaseAdapter.isEmpty()以返回false
public boolean isEmpty() {
return false;
}
我遇到了同样的问题,如果ListView没有项,您可以使用ListView.setAdapter(newsomeAdapter(newArrayList());页眉也是可见的。在我的例子中,我有页眉和页脚视图。 我将我的
mEmptyView
放在页脚视图中
首先,作为用户1034295,我重写了适配器的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
是列表视图
的页脚视图中的子视图。
因此,当列表大小为0时,页眉/页脚视图将保持不变+
mEmptyView
将可见。您可以将列表视图和空布局放在一个框架布局中,然后
空的布局页边距在标题的大小中,然后,您可以在将项目添加到listview时更改空视图的可见性
布局与此类似:
<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>
//在此处插入布局
将显示空视图,而不是列表视图?@Manfred Moser:这在我上面链接的页面上的MergeAdapter
文档中有介绍。默认情况下,带有页眉+页脚视图的MergeAdapter
不会显示空视图,即使适配器为空。如果你想改变这种行为,你需要在一个子类中重写isEmpty()
。谢谢马克-在我的例子中添加所有这些可能有点重,但我会看一看-也许我可以从你的代码中提取一些并使用一种方法。这样页眉/页脚就不会作为列表的一部分滚动。我已经得到了,就像我在问题中说的,我更希望页眉和页脚是滚动列表的一部分。围绕这两个视图包装一个滚动视图也不起作用..不,使用addHeaderView(R.layout.your_header)添加标题;您还可以将标题添加到id/empty中。这样,当您有项目时,它会滚动,当您没有项目时,它仍会显示。使用和标记停止XML代码复制您可以将空视图的可见性设置为GONE
,并将ListView
设置为可见。请看下面的答案:添加null不是一个好主意。它会用缓存/以前回收的视图填充你的项目。你每天都学到新东西,今天你教了我一些新东西
<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>