当ListView中没有项目时,Android的addHeaderView消失了

31

我正在使用addHeaderView将一个视图项目添加到ListView的顶部。我还有一个TextView用于显示列表中没有项目的消息。

以下是布局:

<ListView android:id="@android:id/list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"/>          

<TextView
    android:id="@android:id/empty"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:text="@string/list_empty"
    android:gravity="center"
    android:textAppearance="?android:attr/textAppearanceMedium" />

以下是Java代码:

final ListView listView = getListView();
final View view = getLayoutInflater().inflate(R.layout.list_item_add,
            listView, false);
listView.addHeaderView(view, null, true);

当ListView中有项目时,标题将被显示,但如果我删除列表中的所有项目(除了标题视图),则标题视图将消失。

我希望无论列表中是否有项目,标题视图都可以在列表视图中可见。

谢谢。


3
如果你找不到其他解决问题的方法,你可以考虑使用我的 MergeAdapter 替换你使用的 addHeaderView() 方法,因为我相当确定 MergeAdapter 不会遇到这个问题:https://github.com/commonsguy/cwac-merge - CommonsWare
3
这里给出了一个好的答案: https://dev59.com/dWs05IYBdhLWcg3wGuKd - agamov
1
你是怎么解决的? - Piotr
这是解决方案-->http://stackoverflow.com/a/34557372/542532 - Sadegh
2个回答

36

从您的布局中删除@android:id/empty视图,或者覆盖/子类化您的适配器以从isEmpty()返回false。


10
如果那样的话,当列表为空时它就不会显示空视图了。 - sidon
2
不用说,重写 isEmpty() 后,请确保实例化适配器并将其设置为 ListView。 - jargetz
1
我们在这里具体做什么?我正在遭受这个问题的困扰。你所说的覆盖isEmpty然后设置适配器是什么意思? - erdomester

5

根据我的经验(SDK版本10):

在适配器中重写isEmpty()方法可以使其正常工作。

然后,可选择删除@android:id/empty视图。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接