【问题标题】:Android ListView not showing newly added items and erasing old items when switching content views切换内容视图时,Android ListView 不显示新添加的项目并擦除旧项目
【发布时间】:2012-12-27 15:33:44
【问题描述】:

我在我的 xml 布局文件中定义了一个自定义列表视图。我可以通过数组适配器在onCreate 方法中向这个ListView 添加项目。

但是,当我从另一个内容视图添加项目然后返回到具有 ListView 的内容视图时,所有项目都消失了,并且没有列出任何内容。即使在致电.notifyDataSetChanged();

似乎我只能在当前显示包含 ListView 的内容视图时添加到列表中。这是默认行为吗?

尝试解决方法失败

我使用另一个数组来保留新添加的项目,然后在 ListView 再次可见时尝试添加它们。我必须覆盖 onContentChanged() 才能这样做,但仍然没有添加任何项目。

所以主要问题是

如何将项目动态添加到 ListView,即使它不在视线范围内并仍然保留旧项目?

PS:我不得不说 Android API 是我遇到过的最糟糕的 API 之一

【问题讨论】:

  • “另一个内容视图”是什么意思?
  • @TomaszGawel 我有几个布局可以使用setContentView()动态切换到

标签: java android listview


【解决方案1】:

如果你改变内容视图,那么之前的所有视图都将被销毁。你在使用适配器吗?如果是这样,那么将所有项目再次添加到列表中将非常容易。

除了在 onCreate 之外,不应该有任何理由设置内容视图。

如果您希望拥有多个屏幕,而不是更改内容视图,请启动一个新活动。

【讨论】:

  • 这是有道理的。我先试试这个,很快就会回复你。
  • 好的。所以我们已经确定最好的方法是拥有多个活动,现在它工作正常。
【解决方案2】:

动态添加项目:

//add at the top of the list
mListView.addHeaderView(itemView);
// add at the bottom of the list
mListView.addFooterView(itemView);

【讨论】:

  • 我可以添加任何内容,但是当返回内容视图时,项目会被删除。
  • 从技术上讲,您可以添加多个页眉或页脚,所以这会起作用 - 但这是一个 hack,原始发布者需要能够将元素添加到他的 ListView 的支持数组中,而不是添加页眉或页脚(原始支持数据的辅助)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-09
相关资源
最近更新 更多