如何检测Android ListView上的双触摸/点击?

时间:2009-12-26 08:02:27

标签: android

您知道如何检测ListView上的两次触摸/点击吗?

我试图在双击时调用以下方法:

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
}

提前致谢。

6 个答案:

答案 0 :(得分:4)

你为什么不使用Long Touch?或者你已经在使用其他东西?长触摸优于双触的优点:

  • 长按是UI准则中推荐的互动,双击不是。
  • 这是用户的期望;用户可能找不到双触操作,因为他们不会去寻找它
  • 已经handled in the API

答案 1 :(得分:2)

答案 2 :(得分:1)

如果您在UI中使用双击,则可以始终在Actvity或其他容器中保存状态。

一个简单的实现方式是存储触摸注册的时间,并与下一个触摸事件的时间进行比较,以确定自第二次触摸以来所经过的时间是否在您定义双重标签的任何范围内。< / p>

答案 3 :(得分:1)

我认为对ListView进行双击可以完全有效,特别是如果它是在未占用的区域完成的话。例如,我有一个日记应用程序列出今天的行动。这已经是长按,允许编辑或删除操作。但左/右触摸手势用于快速移动到上一天/下一天,双击是返回“今天”的快捷方式。那是直觉吗?嗯,我认为足够接近。

答案 4 :(得分:0)

我认为对于双击或触摸你必须使用GestureDetector及其触摸方法进行单击和双击。 这是一个参考链接 http://www.linux.com/learn/tutorials/715651-make-android-multi-touch-coding-simpler-with-gesturedetector

答案 5 :(得分:0)

我的答案基于此link,它对我有用。


final GestureDetector gestureDectector = new GestureDetector(mContext, new GestureListener());
        listview.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_MOVE) {
                return false;
            }
            gestureDectector.onTouchEvent(event);
            return true;
        }
    });

class GestureListener extends GestureDetector.SimpleOnGestureListener {

public boolean onDoubleTap(MotionEvent e) { int position = listview.pointToPosition((int) e.getX(), (int) e.getY()); if (position < 0) { return true; } Toast.makeText(mContext, "double-click " + mList.get(position).content, Toast.LENGTH_SHORT).show(); return true; } @Override public boolean onSingleTapConfirmed(MotionEvent e) { int position = listview.pointToPosition((int) e.getX(), (int) e.getY()); if (position < 0) { return true; } Toast.makeText(mContext, "single-click " + mList.get(position).content, Toast.LENGTH_SHORT).show(); return true; } }