2016-08-07 5 views
0
Handler handler = new Handler();  
    if (v.getId() == R.id.play){  
     handler.postDelayed(new Runnable() {      
     public void run() { 
      play.setBackgroundResource(R.drawable.ilk); 
     } 
    }, 2000);  
     play.setText("Play");  
} 

背景を最初に設定してから2秒後にコードが次の行であるplay.setText("Play");に続き、そのようになります。これの代わりに、最初のテキストが表示されます。 2秒後に背景が変わります。ハンドラをアンドロイドのタイマーとして使用する方法は?

+0

ようこそスタックオーバーフロー!私はあなたの問題を推測できる限りあなたの質問を編集しました。しかし、コードや説明を追加することで、より多くの人々がその知識を持つ人に見られるようになります。特定の問題を特定するために必要な場合は、特定のエラーメッセージを編集してください。がんばろう! – manetsus

+0

ありがとうございました。私の問題はコードから独立しています。例としてこのコードをアップロードします。私はちょうどその遅延(秒)のようなmetodがあることについて疑問に思います。どのコードブロックでも使用できます。 – Enes

答えて

0

Handler.postDelayedすぐに戻ります。そして次の行が実行されます。 ミリ秒後、Runnableが実行されます。

だからあなたのコードは次のようにする必要があります:

void doFirstWork() { 
    Handler handler = new Handler(); 

    if (v.getId() == R.id.play){ 

     handler.postDelayed(new Runnable() { 
      public void run() { 
       play.setText("Play"); 
       doNextWork(); 
      } 
     }, 2000); 

     play.setBackgroundResource(R.drawable.ilk); 
    } 
} 

void doNextWork() { 
    ... 
} 
+0

私はこれを持っていますが、私が望むのは、Handler.postDelayedが実行された後、そこにコードブロックがたくさんあるので、コードは次の行に続きます。そのような方法はありますか? – Enes

+0

答えを更新しました。ブロッキングUIスレッドは、Android開発ではパターンが曖昧です。 UIスレッドをブロックすると、ユーザーは不満を感じます。 。ありがとう。 – nshmura

+0

私はこれを試してみる – Enes

0

は、第1の背景を設定します。その後、Handler内でテキストを設定します。あなたがpostDelayedの最後に遅れを入れたので、遅れていた遅延の直後、またはあなたの場合には2秒後に起動します。

if (v.getId() == R.id.play){ 
    play.setBackgroundResource(R.drawable.ilk); 
    new Handler().postDelayed(new Runnable() { 
     public void run() { 
      play.setText("Play"); 
     } 
    }, 2000); 

} 
関連する問題