ListView で OnItemClickListener と OnItemLongClickListener を使用しています。現在、OnItemLongClick の後のリリース アクションを検出する方法を探しています。これを達成するための最良の方法は何ですか?
質問する
1786 次
2 に答える
7
@g00dyの回答を受け入れましたが、このソリューションが私のニーズによりよく適合し、コードを1か所に保持できることがわかりました。
私がこれをやっているlistViewをセットアップするActivityの中で:
MyOnLongClickListener myListener = new MyOnLongClickListener(this);
listView.setOnItemLongClickListener(myListener);
listView.setOnTouchListener(myListener.getReleaseListener());
すべての魔法は「MyOnLongClickListener」内で発生します。
public class MyOnLongClickListener implements AdapterView.OnItemLongClickListener {
private View.OnTouchListener mReleaseListener = new OnReleaseListener();
private boolean mEnabled = false;
private Context mContext;
public MyOnLongClickListener(Context context) {
mContext = context;
}
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(mContext, "OnLongClick", Toast.LENGTH_SHORT).show();
mEnabled = true;
return true;
}
/**
* Returns a listener for the release event.
* @return
*/
public View.OnTouchListener getReleaseListener() {
return mReleaseListener;
}
/**
* Listener for the Release event.
*/
private class OnReleaseListener implements View.OnTouchListener {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if(motionEvent.getAction() == android.view.MotionEvent.ACTION_UP) {
if(mEnabled) {
Toast.makeText(mContext, "Release", Toast.LENGTH_SHORT).show();
/* Execute... */
mEnabled = false;
return true;
}
}
return false;
}
}
}
于 2013-08-09T12:08:33.757 に答える
2
ここ()を見てください (主にここ、探しているはずですACTION_UP
):
public static final int ACTION_UP
API レベル 1 に追加された getAction() 値: キーが解放されました。
定数値: 1 (0x00000001)
何かのようなもの:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.ACTION_UP) {
// do something on ACTION_UP.
return true;
}
return super.onKeyDown(keyCode, event);
}
于 2013-08-09T11:06:04.070 に答える