私は、ウィジェットのいくつかの並べ替えがその場で作成され、ドラッグアンドドロップで並べ替えることができるアプリケーションを作っています。ドラッグを開始し、 postDelayed()の実行をキャンセルする方法
- 長押し:私は2つのことを実現しようとしています。
しかし、ハンドラの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イベントのコードは実行されますが、実行可能ファイル内のコードはまだ実行されます。オブジェクトを短く押すと、実行可能コードを取り消すことはできますか?
私はそれを行うことはできません。私のアプリは動的に追加される複数の同一のオブジェクトを作成します。実行可能ファイル内のコードは特定のオブジェクトに固有のものでなければなりません。 –
しかしあなたのダイナミックなオブジェクトは、何らかの識別情報を持っていなければなりません。だからあなたは実行可能メソッドにそのパラメータを渡すことはできません?そうすれば、現在実行中のオブジェクトを知ることができます。 –
実行可能ファイルの場合、TouchListenerから必要なものは、VIEWオブジェクトへの参照です。そのオブジェクトを実行するときに、そのオブジェクトをRunnableメソッドに渡すことができます。 –