2

リストビューで使用される配列アダプターがあります。アダプターは、サーバーからコンテンツを取得または削除することによって定期的に更新されます。私は、定期的にアダプターを更新し、次に adapter.notifydatasetchange(); を使用するために、scheduledthreadpoolexecutor を使用しました。

リストビューが更新され、アイテムなどが削除されますが、たとえば、Android でリストビューをスクロールしてリストビューの最後に近づくと、2 つのアイテムがリストから削除された場合、アプリケーションがクラッシュします。リストビューで何かが更新されず、リストのサイズが初期サイズであると思います。

何かお勧めはありますか?

よろしく、 アリス

こんにちは、みんな、

私は実際に問題の解決策を見つけましたが、ここで返信を確認するのを忘れていました。ご提案いただきありがとうございます。基本的に、スケジュールされたthreadpoolexecutorは更新を行うためにrunnable(updateRunnableと呼びましょう)と呼ばれます。私がやったことは次のとおりです: updateRunnable では、新しいデータを取得して配列アダプターに格納すると、runOnUiThread を使用して別のランナブル (updateListView と呼びます) を呼び出し、updateListView でリストビューのアダプターを設定します。これは私の問題を解決しました

4

2 に答える 2

1

あなたのデータがまったくデータベースのようなものであると仮定すると、ListView の使用を考えると、バックグラウンド サービスをサーバーとの同期を維持するためにContentProviderandを使用するモデルにリファクタリングし、自動的に通知する必要があります。の実装を使用して、基になる DB が変更されたときにリストを自動的に更新するSyncAdapterとバインドすることにより、ListView 。CursorAdapterContentObserver

ContentResolver.requestSync が同期をトリガーしないのはなぜですか? ContentProvider の設定方法を説明します。

ContentProvider の REST 呼び出し、データの永続性、同期と監視を処理する方法では、同期後のリスト更新通知の動作についてもう少し詳しく説明していますContentProvider

セットアップには多くのインフラストラクチャ作業が必要ですが、一度セットアップすると、SyncAdapterモデルに関して驚くほど自動化されたものがたくさんあります。

于 2013-04-20T12:03:48.127 に答える
0

私はかつて同様の問題を抱えていました。ListView は更新を続けるので、次のことができます

1) OnCreate でアクティビティが開始されたときに Listview を表示し、

2) リストビューに更新されたデータを表示するために、この SAME アクティビティを呼び出します。

ただし、同じアクティビティを再度呼び出した後は、現在のインスタンスを最初にすぐに終了します。これは、複数のインスタンスを次々に取得できるためです。

于 2013-04-20T13:58:12.710 に答える