我希望在上次点击后一段时间后更改我的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秒后更改图像。
答案 0 :(得分: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);
}
};
答案 1 :(得分:0)
removeCallbacks
方法删除(取消执行)先前发布的runnable。如果要停止执行,则必须将相同的(Runnable)对象作为removeCallbacks
的参数:
_myRunnable = new Runnable() {...};
...
b.removeCallbacks(_myRunnable);
b.postDelayed(myRunnable, 1500);
答案 2 :(得分:0)
更清楚:
将handler和runnable定义为私有字段。这将使它们在所有按钮点击时可重复使用
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);
第一行删除了之前的回调(我们不再需要它们)
第二行开始新的回调