view.setText("hello");
wait(1000);
view.setText("world");
私が上記の関数を呼び出すと、「hello」は表示されません。テキストは、完全な機能が終了したときにのみ更新されます。 「こんにちは」と尋ねるにはどうすればいいですか?AndroidでのTextViewの更新
view.setText("hello");
wait(1000);
view.setText("world");
私が上記の関数を呼び出すと、「hello」は表示されません。テキストは、完全な機能が終了したときにのみ更新されます。 「こんにちは」と尋ねるにはどうすればいいですか?AndroidでのTextViewの更新
問題は、UIスレッドをブロックしているUIを更新してから再度更新することです。 UIスレッドをスリープさせるべきではありません。悪い習慣であり、ユーザーはそれを気に入らないでしょう。
スレッドを使用すると問題は解決しますが、ここで何をしているのかは本当にスレッドを必要としません(バックグラウンドスレッドからUIを更新しないでください。メッセージ)。
アプリケーションで追加のスレッドを使用しないため、このタイプの単純な更新を行うには、ハンドラを単独で使用する必要があります。その上でpostDelayedメソッドを使用すると、特定の時間にUIスレッドにコールバックさせることができます。
この記事http://developer.android.com/resources/articles/timed-ui-updates.htmlは、タイムドUIアップデートの実装をカバーしており、かなり簡単です。あなたの例変換するに
:
//member variable
private Handler mHandler = new Handler();
//In your current Method
view.setText("hello");
mHandler.postDelayed(mUpdateTimeTask, 1000);
//Member variable
private Runnable mUpdateTimeTask = new Runnable() {
public void run() {
view.setText("world");
}
};
私はあなたの問題が何であるか知っていると思います。
UIオブジェクトを変更すると、その状態は変更されますが、直接は変更されません。わずかに異なるすべてのシステムワークが、基本的なロジックは同じ
メインループである:
1)素子 2の変形例)画面をリフレッシュします。ここで何が起こっているのか
は が世界 リフレッシュに変更待つ ハローに変更 です。修正あなたの待ち時間が表示 何かのように影響を与えないように
- スレッド:
あなたは、メインスレッド待機させるが、インターフェースは決してあなたはいくつかの方法があり、これを解決するために、時間
間のでリフレッシュしません
new Thread(new Runnable(){
public void run(){
wait(1000);
view.setText();
}
}
あなたは問題があります...彼は待機するための呼び出しでUIスレッドをブロックしていますが、あなたの解決策は適切ではありません。 UIをバックグラウンドスレッドから更新しないでください。ビューを更新するには、ハンドラを使用してUIスレッドにメッセージを送り返す必要があります。 –
を私は、デベロッパーセンターにこのコードを発見し、正常に動作します:
view.setText("hello");
new CountDownTimer(1000, 100) {
TextView view = (TextView) findViewById(R.id.view);
public void onTick(long millisUntilFinished) { }
public void onFinish() {
view.setText("World!")
}
}.start();
あなたには、いくつかのより多くのコードを共有することができますか? – st0le