Как сбросить переменную в обработчике - PullRequest
0 голосов
/ 23 февраля 2012

У меня есть обработчик и исполняемый модуль, в обработчике есть цикл, который выполняется от 0 до 5. Когда я запускаю исполняемый модуль в обработчике, он запускается и увеличивает значение до 0 до 5. Но если я дважды щелкаю или щелкаю более 1 раза чем принимает значение temp выше 5. Как я могу сбросить (0) значение temp при каждом щелчке обработчика.

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

Ответы [ 3 ]

0 голосов
/ 23 февраля 2012

Попробуйте сделать это:

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

Не стоит иметь это значение temp в качестве глобальных переменных.Глобальные переменные всегда плохая идея, кстати.

0 голосов
/ 23 февраля 2012

Есть много способов сделать это.

Один из них состоит в том, чтобы сделать временный локальный и запускаемый класс (неанонимным)

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);
        }
    }
});
0 голосов
/ 23 февраля 2012

Попробуйте заменить onClick() на

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