2011-01-24 5 views
2

私が探しているものの最初のいくつかの背景情報とパラメータ。バックグラウンドスレッドから定期的に更新され、いくつかのアクティビティにわたって維持されるListViewの良いアプローチは何ですか?

  • アプリケーションには、1つのリストにアクセスする必要があるいくつかのアクティビティがあります。私はApplicationクラスを使用して、このリストをすべてのアクティビティにわたって維持しています。
  • リストはカスタムオブジェクトのリストです。
  • このリストの項目を表示するListViewを持つアクティビティが1つあります。
  • このリストにアクセスする必要がある他のアクティビティはありますが、ListViewは表示されません。
  • リストをソートまたはフィルタリングすることができます。
  • リストはいつでもバックグラウンドスレッドから更新(追加、削除、更新)することができ、その変更はリストを表示するとすぐに反映されるはずです。

これまでのところ、私のアプローチは、リストの更新を管理することを含め、アプリケーション内のメソッドによってリストを管理することです。ユーザーが現在ListViewを使用してActivity内にいる場合、リストの更新を待機しています。更新を受け取ると、アプリケーションからリストをコピーし、それをListViewsカスタムArrayAdapterに送信します。 ArrayAdapterはこのリストのコピーを取り、ベースリストを置き換え、現在のソートとフィルタを呼び出してリストに実際に表示されているリストを置き換え、notifyDataSetChanged()を呼び出します。これは、リストがUIスレッドから変更された場合、またはnotifyDataSetChanged()が呼び出されない場合にアダプタが持つ問題を回避するためのものです。

これはすべてうまくいきますが、この方法では同じリストのコピーが複数あるため、このリストの他の場所での使用性が低下し、不要なメモリが使用されるという問題があります。また、一定の間隔で多くの更新が発生すると、多くのコピーを作成することができます。

ListViewがメインリストのソースを直接参照できるようにする方法は他に誰かが見ていますが、UIスレッドからのアップデートでは問題は発生しませんか?

ありがとうございました

答えて

1

私のアプローチはそれ以上に優れているかどうかわかりません。私はItemのLinkedListを保持するAdapterを作成します。私はそのアダプターへの静的な参照を保持し、更新が必要な場合、他のアクティビティーなどを保持します。リストを更新してadapter.notifyDataSetChanged()を呼び出す

これはデータのコピーを1つしか使用しないと思う。

+0

アダプタは、ソースリストを保持するものか、アダプタが作成され、ListViewで必要なときにのみ使用されるアダプタですか? – cottonBallPaws

+1

アダプタには、リストに存在する要素のデータが保持されます。 –

+0

どのコンテキストを使用していますか?アプリケーションコンテキストでListAdapterを使用しようとすると失敗します。 – cottonBallPaws

関連する問題