Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 列出所有可见的页眉、页脚和空的活动_Android_Listview - Fatal编程技术网

Android 列出所有可见的页眉、页脚和空的活动

Android 列出所有可见的页眉、页脚和空的活动,android,listview,Android,Listview,我希望ListActivity中的listview显示时,页眉和页脚始终可见,即使列表数据为空 空列表会导致出现空视图,并且页眉和页脚会消失。但是,我的标题有过滤UI,因此应该始终可见 目前我唯一能做到这一点的方法是,将页眉和页脚从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>