2010-11-24 13 views
2
view.setText("hello"); 
wait(1000); 
view.setText("world"); 

私が上記の関数を呼び出すと、「hello」は表示されません。テキストは、完全な機能が終了したときにのみ更新されます。 「こんにちは」と尋ねるにはどうすればいいですか?AndroidでのTextViewの更新

+0

あなたには、いくつかのより多くのコードを共有することができますか? – st0le

答えて

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");  
    } 
}; 
0

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

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

メインループである:

1)素子 2の変形例)画面をリフレッシュします。ここで何が起こっているのか

は が世界 リフレッシュに変更待つ ハローに変更 です。修正あなたの待ち時間が表示 何かのように影響を与えないように

- スレッド:

あなたは、メインスレッド待機させるが、インターフェースは決してあなたはいくつかの方法があり、これを解決するために、時間

のでリフレッシュしません

new Thread(new Runnable(){ 
    public void run(){ 
     wait(1000); 
     view.setText(); 
    } 
} 
  • ビューを無効にします。何かが変化しており、それを再描画する必要があることをディスプレイに知らせる方法です。
+0

あなたは問題があります...彼は待機するための呼び出しでUIスレッドをブロックしていますが、あなたの解決策は適切ではありません。 UIをバックグラウンドスレッドから更新しないでください。ビューを更新するには、ハンドラを使用してUIスレッドにメッセージを送り返す必要があります。 –

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(); 
関連する問題