我正在制作一个应用程序,其中某些小部件即时创建,可以通过拖放进行重新排列。我试图实现两件事情:如何取消postDelayed()的执行
长按启动拖放
短按(或点击)打开菜单更改某些设置。
但我有一个问题,我无法取消处理程序的postdelayed()函数中的代码。我正在使用下面的代码来实现它。
_sliders_item[_sliders_counter].setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(final View v, MotionEvent event) {
Handler hndlr = new Handler();
Runnable _run = new Runnable() {
@Override
public void run() {
ClipData data = ClipData.newPlainText("", "");
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
v.startDrag(data, shadowBuilder, v, 0);
v.setVisibility(View.INVISIBLE);
_t1.setText("executed");
_t1.show();
}
};
if (_enable_editor) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
hndlr.postDelayed(_run,1000);
//return true;
}
if (event.getAction() == MotionEvent.ACTION_UP){
_t1.setText("menu");
_t1.show();
hndlr.removeCallbacks(_run);
//return true;
}
}
return _enable_editor;
}
});
但问题是,当我长按对象,它工作正常。我可以启动拖放。但是当我按下它时,会执行ACTION_UP事件的代码,但runnable中的代码仍会执行。短按对象时如何取消可运行代码?