【问题标题】:RemoveCallback from another location从其他位置移除回调
【发布时间】:2011-12-04 02:48:07
【问题描述】:

我已经使用此处的说明实现了一个在按下时触发重复事件的按钮:

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); 似乎不起作用。我做错了什么?

【问题讨论】:

  • 这有效:pastebin.com/qfWj7YuK 并在不到一秒的时间内停止重复。你确定mHandler.removeCallbacks(mUpdateTask); 被调用了吗?在那里也记录一些东西。
  • 谢谢,看来把电话放在一个新的线程中有所帮助。不知道为什么...

标签: java android handler


【解决方案1】:

通过在它自己的线程中调用mHandler.removeCallbacks(mUpdateTask); 来解决,如下所示:

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

这似乎非常低效,需要一个新线程才能进行此调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    • 2013-11-09
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多