Reputation: 3127
I want my ImageButton
image to be changed after some time after last click.
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);
}
});
This code doesn't work. Line removing callbacks returns true, but doesn't remove any callbacks. If I'm clicking button again and again it will change image after 1,5s after first click.
Upvotes: 0
Views: 876
Reputation: 11817
The removeCallbacks
method removes(cancels the execution of) a previously posted runnable. You have to put the same (Runnable) object as an argument of removeCallbacks
if you wish to stop its execution:
_myRunnable = new Runnable() {...};
...
b.removeCallbacks(_myRunnable);
b.postDelayed(myRunnable, 1500);
Upvotes: 0
Reputation: 1662
To make it clearer:
define handler and runnable as private fields. That will make them reusable on all button clicks
private Handler mHandler = new Handler();
private Runnable mClickRunnable = new Runnable() {
@Override
public void run() {
mInmageView.setImageResource(android.R.drawable.ic_delete);
}
};
in onClick()
mHandler.removeCallbacks(mClickRunnable);
mHandler.postDelayed(mClickRunnable, 1500);
First line removes previous callbacks(we don't need them anymore)
Second line begins new callback
Upvotes: 0
Reputation: 3080
Try this one?
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);
}
};
Upvotes: 1