0

私はメイン クラス A を持っています。そこから Asynctask を拡張するクラス B にオブジェクトを作成します。Aにコンテンツビューを設定しました.BのdoInBackgroundで、AのtextViewを更新したいのですが、

Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

例外。Bでもsetcontentviewを宣言しようとしましたが、役に立たないので、BでAのテキストビューを編集する方法を誰か教えてください??

4

5 に答える 5

3

onProgressUpdate をオーバーライドし、doInBackground で publishProgress を呼び出します

于 2013-04-26T06:56:51.350 に答える
2

UI スレッドから呼び出す必要があるため、setText()fromまたは inonPreExecute()onPostExecute()onProgressUpdate()

runOnUiThread()でハンドラーを使用することもできますがdoInBackground()、そのようなものは AsyncTask を使用する目的に反します。

于 2013-04-26T06:48:18.107 に答える
2

テキストの更新が進捗情報に関係している場合は、publishProgress()/onProgressUpdate()を使用できます。

より広い意味での進捗状況の更新ではない場合、私は Raghav と一緒です。別のアプローチを検討する必要があります。

于 2013-04-26T06:52:40.113 に答える
0

doinBackgroud で UI の変更を行うべきではありません。ポスト実行で実行する必要があり、実行できます。preexecute または onProgressUpdate で通知を設定することもできます。

これがあなたを助けることを願っています。

于 2013-04-26T06:49:44.697 に答える
0

doInBackground は作業スレッドです。UIスレッドでViewを処理しています。、またはでしonPreExecute()てください。これらはすべて UI スレッドで動作しています。onPostExecute()onProgressUpdate

もちろん、Integer を に渡すこともできますonProgressUpdate。2 番目のパラメーターに注意してくださいAysncTask<Void, Integer, VOid>,。2 番目のパラメーターは、onProgressUpdateパラメーターの型を意味します。

于 2013-04-26T06:49:47.197 に答える