2011-01-24 21 views
2

首先一些背景信息和我正在尋找的參數。什麼是定期從後臺線程更新並在多個活動中維護的ListView的好方法?

  • 該應用程序有幾個需要訪問單個列表的活動。我正在使用Application類,以便在所有活動中保持此列表。
  • 該列表是一個自定義對象的列表。
  • 有一項活動具有ListView以顯示此列表中的項目。
  • 還有其他需要能夠訪問此列表的活動,但不顯示ListView。
  • 該列表可能被排序或過濾。
  • 該列表可隨時從後臺線程更新(添加,刪除,更新內容),這些更改應在查看列表時立即反映出來。

到目前爲止,我的方法是通過應用程序中的方法管理列表,包括管理對列表的任何更新。如果用戶當前正在使用ListView的Activity中,它正在監聽列表的更新。當它聽到更新時,它從應用程序複製列表並將其發送到ListViews自定義ArrayAdapter。 ArrayAdapter獲取此列表副本並替換基本列表,調用當前排序並過濾它,然後替換實際顯示在列表中的列表並調用notifyDataSetChanged()。這是爲了避免適配器在列表從UI線程關閉或沒有調用notifyDataSetChanged()時發生任何問題。

這一切都工作得很好,問題是這種方法有同一個列表的多個副本,這會降低此列表在其他地方的可用性並創建不需要的內存使用。如果大量更新在某個時間間隔內進行,它也可以創建大量複製。

所以我期待看看是否有其他人有任何方法可以讓ListView直接引用主列表源,但仍然可以避免從UI線程更新的問題?

謝謝

回答

1

我不知道我的方法更好。我創建一個適配器,它包含項目的LinkedList。我保持對該適​​配器的靜態引用,並且需要更新時,其他活動等。更新列表並調用adapter.notifyDataSetChanged()

我認爲這隻使用一個數據副本。

+0

適配器是保存源列表的東西還是適配器只在ListView中需要時才創建和使用? – cottonBallPaws 2011-01-24 19:29:46

相關問題