最后一次按钮点击后延迟动作

时间:2014-02-10 14:28:34

标签: android runnable android-handler

我希望在上次点击后一段时间后更改我的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秒后更改图像。

3 个答案:

答案 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);

第一行删除了之前的回调(我们不再需要它们)

第二行开始新的回调