1

それ自体にいくつかのビューを含むカスタムビューがあります。このコンテナビュー内のビューの1つがクリックされると、これもコンテナビュー内のTextViewを毎秒更新する必要がある「タイマー」スレッドを実行するように作成しました。TextViewを毎秒更新したいときに問題が発生します。どうやら、思ったほど簡単ではなかったようです。このようにコンテナビュー内にRunnableを実装し、ボタンがクリックされてタイマーを開始したときにスレッドを実行しました。

public void run() {
        while(runnning) {
            // if one second has passed, update the Textview
        }
}

典型的なcannot-touch-views-outside-hierarchy例外が発生します。これは、基本的にUIスレッドで実行されていないことを意味します。post(Runnable)スレッドの最後まで1秒間更新するのを待ちたくないので、ここでは使用しません。また、アクティビティ全体をそれ自体に渡して実行することも実用的ではありませんrunOnUiThread(Runnable)。それで、誰かが私がこれをどうやってやるのか教えてもらえますか?誰かが説明が必要な場合は、私に知らせてください!

4

2 に答える 2

0

アクティビティ全体を渡すとはどういう意味ですか?? UIを更新したいときはいつでも(1秒後など)、このスレッド内にタイマースレッドを作成することでそれを実現できます。 runOnUIThread() を呼び出します。

于 2011-08-02T04:40:03.460 に答える
0

Android AsyncTaskを使用したい。何かが完了するのを待っている間に、このタイプの定期的な GUI 更新のための Android 固有の構造です。

doInBackground でタイマーを実行し、GUI を更新したいときはいつでも publishProgress を呼び出すようにします。次に、onProgressUpdate で GUI を更新します。onProgressUpdate は GUI スレッドで実行され、doInBackground はバックグラウンド スレッドで自動的に実行されます。

于 2011-08-02T04:43:55.437 に答える