RemoveCallback из другого места - PullRequest
0 голосов
/ 04 декабря 2011

Я реализовал кнопку, которая запускает повторяющееся событие, все еще будучи нажатой, используя инструкции здесь:

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 голосов
/ 10 декабря 2011

Решается путем вызова mHandler.removeCallbacks(mUpdateTask); в своем собственном потоке, например так:

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

Это кажется очень неэффективным, потому что для выполнения этого вызова нужен новый поток.

...