2

首先是我正在寻找的一些背景信息和参数。

  • 该应用程序有几个需要访问单个列表的活动。我正在使用Application类来在所有活动中维护此列表。
  • 该列表是自定义对象的列表。
  • 有一个活动有一个 ListView 来显示此列表中的项目。
  • 还有其他活动需要能够访问此列表,但不显示 ListView。
  • 可以对列表进行排序或过滤。
  • 可以随时从后台线程更新(添加、删除、更新内容)列表,这些更改应在查看列表时立即反映。

到目前为止,我的方法是通过应用程序中的方法管理列表,包括管理列表的任何更新。如果用户当前在具有 ListView 的 Activity 中,则它正在侦听列表的更新。当它听到更新时,它会从应用程序复制列表并将其发送到 ListViews 自定义 ArrayAdapter。ArrayAdapter 获取此列表副本并替换基本列表,在其上调用当前排序和过滤器,然后替换实际显示在列表中的列表并调用notifyDataSetChanged(). 这一切都是为了避免如果列表从 UI 线程更改或没有notifyDataSetChanged()调用,适配器将遇到任何问题。

这一切都很好,问题是使用这种方法有同一个列表的多个副本,这会降低该列表在其他地方的可用性并创建不需要的内存使用。如果在某个时间间隔内有大量更新,它也可以创建大量复制。

所以我想看看是否有其他人有任何方法可以允许 ListView 直接引用主列表源但仍然避免从 UI 线程更新问题?

谢谢

4

1 回答 1

1

我不知道我的方法是否更好。我创建了一个适配器,它包含一个 LinkedList 项目。我保留对该适配器的静态引用,并且当需要更新时,其他活动等。更新列表并调用 adapter.notifyDataSetChanged()

我认为这只使用了一份数据。

于 2011-01-24T19:26:14.500 回答