Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在处理程序中重置变量_Android_Handler - Fatal编程技术网

Android 如何在处理程序中重置变量

Android 如何在处理程序中重置变量,android,handler,Android,Handler,我有一个处理程序和一个可运行的,处理程序有一个从0到5运行的循环。当我在处理程序中启动runnable时,它会运行并将值增加到0到5。但是,如果我双击或单击超过1次,则temp的值将大于5。如何在每次单击处理程序时重置(0)临时值 final Handler deneme = new Handler(); final Runnable post_score = new Runnable(){ public void run(){ Log.i("TAG", Integer.

我有一个处理程序和一个可运行的,处理程序有一个从0到5运行的循环。当我在处理程序中启动runnable时,它会运行并将值增加到0到5。但是,如果我双击或单击超过1次,则temp的值将大于5。如何在每次单击处理程序时重置(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);
           }
      }
});
final Handler deneme=new Handler();
最终可运行post_分数=新可运行(){
公开募捐{
Log.i(“TAG”,Integer.toString(temp));
temp++;
}
};
按钮tv=(按钮)findViewById(R.id.button1);
setOnClickListener(新的OnClickListener(){
公共void onClick(视图arg0){
温度=0;
对于(int i=0;i<5;i++){
deneme.postDelayed(post_分数,i*250);
}
}
});

尝试将
onClick()替换为

public void onClick(View arg0) {
       deneme.removeCallbacks(post_score);
       temp = 0;
       for(int i=0; i < 5;)
           deneme.postDelayed(post_score, i *250);
       }
  }
public void onClick(视图arg0){
deneme.removeCallbacks(赛后得分);
温度=0;
对于(int i=0;i<5;)
deneme.postDelayed(post_分数,i*250);
}
}
尝试执行以下操作:

for (int i = 0; i < 5; i++) {
    final temp = i;
    deneme.postDelayed(new Runnable() {
        public void run(){
            Log.i("TAG", Integer.toString(temp));
        }
    }
}
for(int i=0;i<5;i++){
最终温度=i;
deneme.postDelayed(新的Runnable(){
公开募捐{
Log.i(“TAG”,Integer.toString(temp));
}
}
}

temp
作为全局变量不是一个好主意。顺便说一句,全局变量总是一个坏主意。

有很多方法可以做到这一点

一种是将temp设置为本地,并将其设置为可运行的(非匿名)类

私有静态类CountRunnable实现Runnable{
私人内部温度=0;
@凌驾
公开募捐{
Log.i(“TAG”,Integer.toString(temp));
temp++;
}
};
setOnClickListener(新的OnClickListener(){
公共void onClick(视图arg0){
Runnable countRunnable=new countRunnable()
对于(int i=0;i<5;i++){
deneme.postDelayed(可计数,i*250);
}
}
});

也许你的意思是
删除回调
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);
        }
    }
});