2012-02-23 6 views
0

私はハンドラと実行可能ファイルを持っていますが、ハンドラには0から5までのループがあります。ハンドラで実行可能ファイルを起動すると実行され、値は0から5までインクリメントされます。または5以上のtempの値を取るよりも1回以上クリックしてください。どのようにしてハンドラをクリックするたびにtempの値をリセット(0)できますか?ハンドラで変数をリセットするには

final Handler deneme = new Handler(); 
final Runnable post_score = new Runnable(){ 
    public void run(){ 
     Log.i("TAG", Integer.toString(temp)); 
     temp++; 
     } 
}; 


Button tv = (Button)findViewById(R.id.button1); 
tv.setOnClickListener(new OnClickListener() { 
     public void onClick(View arg0) { 
      temp = 0; 
      for(int i=0; i < 5;i++){ 
       deneme.postDelayed(post_score, i *250); 
      } 
     } 
}); 

答えて

0

public void onClick(View arg0) { 
     deneme.removeCallbacks(post_score); 
     temp = 0; 
     for(int i=0; i < 5;) 
      deneme.postDelayed(post_score, i *250); 
     } 
    } 
+1

はたぶん、あなたは 'removeCallbacks'を意味し、一時はローカルおよび実行可能にすることですか? – Fixpoint

+0

ええ、ありがとう。既に固定されています – birdy

0

であなたのonClick()を交換してみてくださいこれをやってみてください。

for (int i = 0; i < 5; i++) { 
    final temp = i; 
    deneme.postDelayed(new Runnable() { 
     public void run(){ 
      Log.i("TAG", Integer.toString(temp)); 
     } 
    } 
} 

それはグローバル変数としてtempことを持つことは良い考えではありません。グローバル変数は常に悪い考えです、btw。

0

これを実行する方法は多数あります。

一つは、(非匿名)クラス

private static class CountRunnable implements Runnable { 
    private int temp = 0; 

    @Override 
    public void run(){ 
     Log.i("TAG", Integer.toString(temp)); 
     temp++; 
    } 
}; 

tv.setOnClickListener(new OnClickListener() { 
    public void onClick(View arg0) { 
     Runnable countRunnable = new CountRunnable() 
     for(int i=0; i < 5;i++){ 
      deneme.postDelayed(countRunnable, i *250); 
     } 
    } 
});