2
view.setText("hello");
wait(1000);
view.setText("world");

上記の関数を呼び出すと、ビューに「こんにちは」がまったく表示されません。テキストは、完全な関数が終了したときにのみ更新されます。「こんにちは」を見るには何と呼ばなければなりませんか?

4

3 に答える 3

5

問題は、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");      
   }
};
于 2010-11-24T08:38:14.780 に答える
1

開発者センターでこのコードを見つけて、正常に動作します:

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();
于 2012-07-22T21:16:28.970 に答える
0

私はあなたの問題が何であるかを知っていると思います。

UI オブジェクトを変更すると、その状態は変更されますが、画面は直接変更されません。すべてのシステムの動作はわずかに異なりますが、基本的なロジックは同じです

メインループ:

1) 要素の変更 2) 画面の更新。

ここで何が起こっているかというと、変更を hello 待機に変更し、変更をワールド リフレッシュに変更することです。

メインスレッドを待機させますが、その間にインターフェイスが更新されることはありません

これを解決するには、いくつかの方法があります。

-あなたの待機が表示に影響を与えないように、変更をスレッド化します

new Thread(new Runnable(){
    public void run(){
        wait(1000);
        view.setText();
    }
}
  • ビューを無効にします。これは、何かが変更され、再描画が必要であることをディスプレイに知らせる方法です。
于 2010-11-24T08:07:38.017 に答える