2014-02-10 2 views
0

Я хочу, чтобы мое ImageButton изображение изменилось через некоторое время после последнее клик.Отложенное действие после последней кнопки нажмите

ImageButton b = ... 
b.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
    b.removeCallbacks(null); 
    b.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
     b.setImageResource(android.R.drawable.ic_delete); 
     } 
    }, 1500); 
    } 
}); 

Этот код не работает. Линки, удаляющие обратные вызовы, возвращают true, но не удаляют обратные вызовы. Если я нажимаю кнопку снова и снова, она будет меняться после 1,5 секунд после первого щелчка.

ответ

1

Попробуйте этот?

public void onClick(View v) { 
    b.removeCallbacks(clickRunnable); 
    b.postDelayed(clickRunnable, 1500); 
    } 


    Runnable clickRunnable = new Runnable() { 
     @Override 
     public void run() { 
     b.setImageResource(android.R.drawable.ic_delete); 
     } 
    }; 
0

В removeCallbacks метод удаляет (отменяет выполнение) ранее отправил работоспособной. Вы должны поставить тот же (Runnable) объект в качестве аргумента removeCallbacks, если вы хотите, чтобы остановить его выполнение:

_myRunnable = new Runnable() {...}; 
... 
b.removeCallbacks(_myRunnable); 
b.postDelayed(myRunnable, 1500); 
0

Чтобы было понятнее:

определить обработчик и работоспособным в качестве частных полей. Это сделает их многократного использования на все кнопки нажимает

private Handler mHandler = new Handler(); 
private Runnable mClickRunnable = new Runnable() { 
     @Override 
     public void run() { 
     mInmageView.setImageResource(android.R.drawable.ic_delete); 
     } 
    }; 

в onClick()

mHandler.removeCallbacks(mClickRunnable); 
mHandler.postDelayed(mClickRunnable, 1500); 

Первая строка удаляет предыдущие обратные вызовы (мы не нуждаемся в них больше)

Вторая линия начинается новый обратный вызов

Смежные вопросы