【发布时间】:2013-08-09 20:08:33
【问题描述】:
我在 ListView 中使用 OnItemClickListener 和 OnItemLongClickListener,现在我正在寻找一种方法来检测 OnItemLongClick 之后的释放操作,最好的方法是什么?
【问题讨论】:
标签: android events android-listview touch listener
我在 ListView 中使用 OnItemClickListener 和 OnItemLongClickListener,现在我正在寻找一种方法来检测 OnItemLongClick 之后的释放操作,最好的方法是什么?
【问题讨论】:
标签: android events android-listview touch listener
虽然我接受了@g00dy 的回答,但我发现这个解决方案更适合我的需求,并将我的代码保存在一个地方。
在我设置 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;
}
}
}
【讨论】:
看看here()(主要是here,你应该找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);
}
【讨论】:
onKeyDow改成onKeyLongPress,保留函数体,这样就够了