从另一个位置删除回调

时间:2011-12-04 02:48:07

标签: java android handler

我已经实现了一个触发重复事件的按钮,同时仍按照此处的说明进行操作:

http://groups.google.com/group/android-developers/browse_thread/thread/5ce6d97956952472/50a625cc3cef1bec?lnk=gst&q=%22Auto+repeat+button%22&pli=1

Button buttonDown = (Button) findViewById(R.id.buttonDown);
    buttonDown.setOnTouchListener(new OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
            int action = event.getAction(); 
            if(action == MotionEvent.ACTION_DOWN) {
                move(SOUTH);
                moveDirection = SOUTH;
                mHandler.removeCallbacks(mUpdateTask);
                mHandler.postAtTime(mUpdateTask, SystemClock.uptimeMillis() + 200); 
            } else if (action == MotionEvent.ACTION_UP) {
                mHandler.removeCallbacks(mUpdateTask);
            }
            return false;
        }
    });

这完美无缺。我希望我的程序中的其他触发器也可以停止重复发生的事件。但是放置mHandler.removeCallbacks(mUpdateTask);似乎不起作用。我做错了什么?

1 个答案:

答案 0 :(得分:0)

通过在其自己的线程中调用mHandler.removeCallbacks(mUpdateTask);解决问题:

Thread t = new Thread() {
  public void run() {
    mHandler.removeCallbacks(mUpdateTask);
  }
};
t.setDaemon(true);
t.start();

这看起来非常低效,只需要一个新线程来进行此调用。