0

リストビューとアダプターが接続されたアクティビティがあります。データを同期して保持するクラスがあります。(データがどこから来ているかは気にするべきではないと思います)そしてそれは別のスレッドで実行されます。アダプターを更新するクリーンな方法を知りたいのですが、別のスレッドで実行されるため、そのクラスからアクティビティの関数を呼び出すべきではありません。

私が知っている 1 つの方法は、アクティビティでハンドラーを作成し、それを他のクラスに渡して、そこから使用することです。しかし、アクティビティがバックグラウンドにあるかどうかを知りたいのですが、アクティビティの関数を UI スレッドから呼び出すことができるか、アクティビティがフォアグラウンドになったときにのみ呼び出すことができます。

更新を見逃したくないので、アクティビティがフォアグラウンドにあるときに更新したいと考えています。

4

4 に答える 4

1

別のクラスから listView を更新する場合は、いくつかの方法があります。

  1. ワーカー クラスから broadcastIntent を送信し、BroadcastReceiver をアクティビティに追加します。適切なメッセージを受信したら、リストビューを更新します。

  2. AsyncTask2番目の方法は、拡張しdoInBackground()て作業を行い、リストビューをonPostExecute(result)更新するアクティビティにプライベートまたはパブリッククラスを作成することです。

  3. 私が想像できる3番目の方法ですが、UIを更新するために他のクラスから使用できる静的メソッドを作成するのが最善の方法だとは思いません。

少なくとも私の意見では、ここで使用できる最良のものはAsyncTask.

于 2013-01-24T11:09:43.357 に答える
0

別のスレッドで実行されるため、そのクラスからアクティビティの関数を呼び出すべきではありません。

それは間違っている。(Javaでは、オブジェクトはスレッドで実行されていません。メソッドが呼び出されたスレッドでメソッドが実行されていると言えます)

Android (およびほとんどの UI フレームワーク) では、ルールは次のとおりです。

UI スレッドからは、UI を更新するメソッドのみを呼び出すことができます。

スレッド (UI スレッドではない) で実行されているコードがあり、そのコードが UI を更新する必要がある場合: UI スレッドの を使用してHandler、UI 更新コードを UI スレッドに投稿できます。UI を更新するために何かを投稿するときにアクティビティがフォアグラウンドにない場合: 気にしないでください! 投稿したばかりのコードは、将来のある時点で実行されます。

于 2013-01-24T11:01:02.243 に答える
0

AsyncTask を使用する必要があります。http://developer.android.com/reference/android/os/AsyncTask.html をご覧ください

于 2013-01-24T11:08:04.193 に答える
0

このコードはあなたが望むことをします:

         runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    //your actions
                }
         });
于 2013-01-24T10:41:45.723 に答える