Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android OnLongClickListener don';t工作_Android_Ontouchlistener_Onlongclicklistener - Fatal编程技术网

Android OnLongClickListener don';t工作

Android OnLongClickListener don';t工作,android,ontouchlistener,onlongclicklistener,Android,Ontouchlistener,Onlongclicklistener,我有一个拖放代码。如果用户触摸该项,OnTouchListener 代码开始: View.OnTouchListener dragListener = new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { // start move on a touch event if (motionEvent.get

我有一个拖放代码。如果用户触摸该项,
OnTouchListener

代码开始:

View.OnTouchListener dragListener = new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        // start move on a touch event
        if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
            ClipData data = ClipData.newPlainText("", "");
            View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
            view.startDrag(data, shadowBuilder, view, 0);
            // API 24
            // view.startDragAndDrop(data, shadowBuilder, view, View.DRAG_FLAG_GLOBAL); // API 24
            view.setVisibility(View.VISIBLE);
            return true;
        }
        return false;
    }
};
但是我的代码上会有一个
onlongclicklister
。如果该项目被用户按住(长时间单击),则屏幕上将显示toast消息:

    homebutton.setOnLongClickListener(new OnLongClickListener() {
public boolean onLongClick(View arg0) {
    Toast.makeText(UserArea.this, "laaaange geklickt", Toast.LENGTH_SHORT).show();
    return true;  
}
});

但它不起作用:-(

从侦听器返回false)

View.OnTouchListener dragListener = new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        //your logic 
        return false;
    }
};

否则,您的事件将被视为已完成

从侦听器返回false

View.OnTouchListener dragListener = new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        //your logic 
        return false;
    }
};

否则,您的事件将被视为已完成

编辑您的触摸事件,并根据阈值决定触摸或长按

private float mDownX;
private float mDownY;
private final float SCROLL_THRESHOLD = 10;
private boolean isOnClick;

@Override
public boolean onTouchEvent(MotionEvent ev) {
    switch (ev.getAction() & MotionEvent.ACTION_MASK) {
        case MotionEvent.ACTION_DOWN:
            mDownX = ev.getX();
            mDownY = ev.getY();
            isOnClick = true;
            break;
        case MotionEvent.ACTION_CANCEL:
        case MotionEvent.ACTION_UP:
            if (isOnClick) {
                Log.i(LOG_TAG, "onClick ");
                //TODO onClick code
            }
            break;
        case MotionEvent.ACTION_MOVE:
            if (isOnClick && (Math.abs(mDownX - ev.getX()) > SCROLL_THRESHOLD || Math.abs(mDownY - ev.getY()) > SCROLL_THRESHOLD)) {
                Log.i(LOG_TAG, "movement detected");
                isOnClick = false;
            }
            break;
        default:
            break;
    }
    return true;
}

编辑触摸事件,并根据阈值决定触摸或长按

private float mDownX;
private float mDownY;
private final float SCROLL_THRESHOLD = 10;
private boolean isOnClick;

@Override
public boolean onTouchEvent(MotionEvent ev) {
    switch (ev.getAction() & MotionEvent.ACTION_MASK) {
        case MotionEvent.ACTION_DOWN:
            mDownX = ev.getX();
            mDownY = ev.getY();
            isOnClick = true;
            break;
        case MotionEvent.ACTION_CANCEL:
        case MotionEvent.ACTION_UP:
            if (isOnClick) {
                Log.i(LOG_TAG, "onClick ");
                //TODO onClick code
            }
            break;
        case MotionEvent.ACTION_MOVE:
            if (isOnClick && (Math.abs(mDownX - ev.getX()) > SCROLL_THRESHOLD || Math.abs(mDownY - ev.getY()) > SCROLL_THRESHOLD)) {
                Log.i(LOG_TAG, "movement detected");
                isOnClick = false;
            }
            break;
        default:
            break;
    }
    return true;
}

您的dargListener是否也设置了homeButton?如果您的dargListener设置了homeButton,那么您应该从if(motionEvent.getAction()==motionEvent.ACTION_DOWN){return false;}条件返回false;}对不起,我不知道,“dragListener也设置了homeButton”是什么意思:-(你的dargListener也设置了homeButton吗?如果你也设置了homeButton,那么你应该从if返回false(motionEvent.getAction()==motionEvent.ACTION_DOWN){return false;}条件抱歉,我不知道,“dragListener也设置了homeButton”是什么意思:-(findViewById(R.id.homeButton).setOnTouchListener(dragListener);处理onTouchEvent后-如果返回true,则返回true不会在层次结构中进一步传播触摸事件,该事件将被视为已消费。只有返回false,它才会传播触摸事件。好的,我已将return设置为false。但代码不起作用。我只能拖放imgBtn,但不要单击:-(如果删除行“findViewById(R.id.imgBtnItem1).setOnTouchListener(dragListener);”按钮是可点击的,但我不能使用拖放,请检查如何覆盖触摸移动和检测longClickfindViewById(R.id.homebutton).setOnTouchListener(dragListener);处理onTouchEvent后-如果返回true,则返回true不会在层次结构中进一步传播触摸事件,该事件将被视为已消费。只有返回false,它才会传播触摸事件。好的,我已将return设置为false。但代码不起作用。我只能拖放imgBtn,但不要单击:-(如果删除行“findViewById(R.id.imgBtnItem1).setOnTouchListener(dragListener);”按钮是可点击的,但我不能使用拖放。请检查如何覆盖触摸和检测长点击。这是一个字符串变量。您必须定义私有静态最终字符串日志。\u TAG=私有静态最终字符串日志\u TAG=UserArea;/I错误:应为表达式:-(“UserArea”是我的类名private static final String LOG_TAG=“UserArea”字符串应该用引号表示是的!它可以运行!非常感谢;-)这是一个字符串变量您必须定义private static final String LOG_TAG=private static final String LOG_TAG=UserArea;/I得到一个错误:表达式应为-(“UserArea”是我的类名private static final String LOG_TAG=“UserArea”字符串应该在quotesYEAH!它会运行!非常感谢;-)