好的,所以我对android java编程有点新意。我一直在寻找答案已经有一段时间没有任何成功了。
以下是一个例子:
setAlarmHandler(difference); //(difference is in MS)
public void setAlarmHandler (long difference) {
Handler myHandler = new Handler();
Runnable setAlarm = new Runnable() {
public void run() {
System.out.println("test");
}
};
// Schedule the execution
myHandler.postDelayed(setAlarm, difference);
}
public void addListenerOnCheckBox1() {
checkBox1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if(checkBox1.isChecked()){
myHandler.removeCallbacks(setAlarm); }
}
});
}
所以我尝试从"addListenerOnCheckBox1()"
取消处理程序,但我收到错误"myHandler cannot be resolved"
。那么我需要做什么才能从这个方法中取消处理程序?此外,如果我只是忽略“取消部分”(删除"myHandler.removeCallbacks(setAlarm);")
,那么该应用程序在我的模拟器中运行得非常完美。
我确定我正在寻找的答案会让我感到非常愚蠢,但我无法独立完成这项工作。非常感谢任何帮助!
答案 0 :(得分:1)
Handler myHandler
将此声明为实例变量。
您已在myHandler
中声明并初始化setAlarmHandler
,这使其成为该方法的本地
public void setAlarmHandler (long difference) {
Handler myHandler = new Handler();// local to setAlaramHandler
对于
来说是一样的Runnable setAlarm
答案 1 :(得分:1)
您可以删除与您的处理程序相关联的所有callbacks
作为参数传递null
。你的错误是每次调用方法时都要创建Runnable setAlarm
的新实例。