3

でやりたいのですsetText()が、TextView直後にアクティビティをスリープさせます。

コードは次のとおりです。

tv.setText("myText");
tv.invalidate(); // Doesn't work
pause(1000); // French for sleep

そして私の機能は一時停止します:

public void pause(int seconds)
{
    synchronized(this)
    {
        try { 
            this.wait(seconds); 
        } catch (InterruptedException ie) { 
            ie.printStackTrace();
        }
    }
}

問題は、スリープする前に TextView が更新されないことです。TextViewを呼び出そうとしinvalidate()ましたが、機能しません。

別の解決策があります。アクティビティをスリープさせるための新しいスレッドを作成し、TextView の値がまだ同じ場合はスレッドをリロードし、そうでない場合は関数を呼び出しますpause()。しかし、 View で TextView の実際の値を取得することは可能ですか? 私がするとき、私は新しいテキストを得ることができるので:

tv.setText("myText");
System.out.println(tv.getText());
pause(1000); // French for sleep

一方、テキストはビューで更新されません。

何か案が ?

4

2 に答える 2

2

ジェイブが言ったことを提案します。

tv.setText("myText");
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                //Do something
            }
        }, 3000); //3000 is time in ms.
于 2013-02-18T20:22:03.080 に答える
0

UI スレッドを使用して長時間スリープ状態にすると、アプリケーションが応答しないダイアログが表示されます。もちろん、関数が終了したときにのみ新しい値が表示されるため、これは適切な解決策ではありません。UI スレッドのみを使用する場合は、ハンドラーを使用できます。

別のスレッドを使用する場合は、UI スレッドを使用して何らかの方法で TextView のテキストを設定する必要があります。それが許可されている唯一のスレッドであるためです (これにはハンドラーを使用します)。

于 2013-02-18T20:54:04.623 に答える