修改listview中onItemLongClick的失效

时间:2015-03-09 14:17:12

标签: android onitemlongclicklistener

我需要修改onItemLongClick的失效(默认持续时间对于老人来说太快了)。有人能帮助我吗?

    listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {

            // Do something
            ...
        }

    });

3 个答案:

答案 0 :(得分:3)

使用OnItemLongClickListener无法实现此目的,您需要自己实施OnTouchListener来定义/确定长时间点击持续时间。

我现在没有可能测试代码,但是这应该给你一个基本的想法从哪里开始:

private long mTimestampDown;
private long mTimestampUp;
private final int longPressDurationMs = 2000; // 2 seconds
private boolean isLongPress = false;

@Override
public boolean onTouchEvent(MotionEvent e) {
 switch (e.getAction()) {
    case MotionEvent.ACTION_DOWN:
      mTimestampDown = System.currentTimeMillis();
        break;
    case MotionEvent.ACTION_CANCEL:
    case MotionEvent.ACTION_UP:
       mTimestampUp = System.currentTimeMillis();
       if(mTimestampUp - mTimestampDown > longPressDurationMs) 
         isLongPress = true;
        break;
    default:
        break;
}
return isLongPress;
}

您的课程应扩展OnTouchListener

答案 1 :(得分:0)

为什么不使用OnTouchListener? 定义您的持续时间,并检查ACTION_DOWN上的触摸时间。

ACTION_UP

if  ( the time > your duration ) { 
    do the job you want 
}

答案 2 :(得分:0)

也许这不是优雅和完美但有2个全局变量(IsDown和位置)我可以解决我的问题。

    listview.setOnTouchListener(new AdapterView.OnTouchListener() {

        @Override
        public boolean onTouch(View view, MotionEvent e) {
            switch (e.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    setIsDown(true);
                    break;
                case MotionEvent.ACTION_CANCEL:
                case MotionEvent.ACTION_UP:
                    setIsDown(false);
                    break;
                default:
                    break;
            }
            return false;
        }

    });

    listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {

            setPosition(position);

            final Handler h = new Handler();
            h.postDelayed(new Runnable()
            {
                @Override
                public void run()
                {
                    if (getIsDown()) {


                         // Do something
                         ...


                    }
                }
            }, 1000); // milliseconds added to longpress

            return true;
        }

    });