我在 ListView 中使用 OnItemClickListener 和 OnItemLongClickListener,现在我正在寻找一种方法来检测 OnItemLongClick 之后的释放操作,完成此操作的最佳方法是什么?
			
			1786 次
		
2 回答
            7        
        
		
虽然我接受了@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;
        }
    }
}
    于 2013-08-09T12:08:33.757   回答
    
    
            2        
        
		
公共静态最终 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   回答