首先是我正在寻找的一些背景信息和参数。
- 该应用程序有几个需要访问单个列表的活动。我正在使用Application类来在所有活动中维护此列表。
- 该列表是自定义对象的列表。
- 有一个活动有一个 ListView 来显示此列表中的项目。
- 还有其他活动需要能够访问此列表,但不显示 ListView。
- 可以对列表进行排序或过滤。
- 可以随时从后台线程更新(添加、删除、更新内容)列表,这些更改应在查看列表时立即反映。
到目前为止,我的方法是通过应用程序中的方法管理列表,包括管理列表的任何更新。如果用户当前在具有 ListView 的 Activity 中,则它正在侦听列表的更新。当它听到更新时,它会从应用程序复制列表并将其发送到 ListViews 自定义 ArrayAdapter。ArrayAdapter 获取此列表副本并替换基本列表,在其上调用当前排序和过滤器,然后替换实际显示在列表中的列表并调用notifyDataSetChanged()
. 这一切都是为了避免如果列表从 UI 线程更改或没有notifyDataSetChanged()
调用,适配器将遇到任何问题。
这一切都很好,问题是使用这种方法有同一个列表的多个副本,这会降低该列表在其他地方的可用性并创建不需要的内存使用。如果在某个时间间隔内有大量更新,它也可以创建大量复制。
所以我想看看是否有其他人有任何方法可以允许 ListView 直接引用主列表源但仍然避免从 UI 线程更新问题?
谢谢