view.setText("hello");
wait(1000);
view.setText("world");
上記の関数を呼び出すと、ビューに「こんにちは」がまったく表示されません。テキストは、完全な関数が終了したときにのみ更新されます。「こんにちは」を見るには何と呼ばなければなりませんか?
view.setText("hello");
wait(1000);
view.setText("world");
上記の関数を呼び出すと、ビューに「こんにちは」がまったく表示されません。テキストは、完全な関数が終了したときにのみ更新されます。「こんにちは」を見るには何と呼ばなければなりませんか?
問題は、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");
}
};
開発者センターでこのコードを見つけて、正常に動作します:
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();
私はあなたの問題が何であるかを知っていると思います。
UI オブジェクトを変更すると、その状態は変更されますが、画面は直接変更されません。すべてのシステムの動作はわずかに異なりますが、基本的なロジックは同じです
メインループ:
1) 要素の変更 2) 画面の更新。
ここで何が起こっているかというと、変更を hello 待機に変更し、変更をワールド リフレッシュに変更することです。
メインスレッドを待機させますが、その間にインターフェイスが更新されることはありません
これを解決するには、いくつかの方法があります。
-あなたの待機が表示に影響を与えないように、変更をスレッド化します
new Thread(new Runnable(){
public void run(){
wait(1000);
view.setText();
}
}