Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.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 ListView onTouchEvent没有';不要总是放弃行动_Android_Listview_Touch Event - Fatal编程技术网

Android ListView onTouchEvent没有';不要总是放弃行动

Android ListView onTouchEvent没有';不要总是放弃行动,android,listview,touch-event,Android,Listview,Touch Event,我的问题是,当我试图在我的ListView中拖动一个项目时,我并不总是得到ACTION\u DOWN事件。我有很多动作,只有一个动作。 情况并非总是如此。我被击倒了三次。这把我弄糊涂了 我看过类似的问题,但它的答案似乎不适合我。谁能想到为什么会这样 谢谢 //list_client -- a listview list_client.setOnTouchListener(new View.OnTouchListener() { float f1 = -1, f2 = -1 ;

我的问题是,当我试图在我的ListView中拖动一个项目时,我并不总是得到ACTION\u DOWN事件。我有很多动作,只有一个动作。 情况并非总是如此。我被击倒了三次。这把我弄糊涂了

我看过类似的问题,但它的答案似乎不适合我。谁能想到为什么会这样

谢谢

//list_client  --  a listview
list_client.setOnTouchListener(new View.OnTouchListener() {
    float f1 = -1, f2 = -1 ;
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch(event.getAction()){
            case MotionEvent.ACTION_DOWN: 
                f1 = event.getRawY();
                    break;
            case MotionEvent.ACTION_MOVE:
                f2 = event.getRawY();
                if(f2 - f1 > 50){
                    if(View.VISIBLE != rl_search_and_add.getVisbility() &&  ){  rl_search_and_add.setVisibility(View.VISIBLE);
                }
                f1 = f2;
                }else if (f2 - f1 < -50){
                    rl_search_and_add.setVisibility(View.GONE);
                    f1 = f2;
                }
                break; 
            case MotionEvent.ACTION_UP:
                f1 = -1; f2 = -1;
                break; 
        }
        return false;
    }
});
//列表\u客户端--一个列表视图
list_client.setOnTouchListener(新视图.OnTouchListener(){
浮点数f1=-1,f2=-1;
@凌驾
公共布尔onTouch(视图v,运动事件){
开关(event.getAction()){
case MotionEvent.ACTION\u DOWN:
f1=事件。getRawY();
打破
case MotionEvent.ACTION\u移动:
f2=event.getRawY();
如果(f2-f1>50){
if(View.VISIBLE!=rl_search_和_add.getvisibility()&){rl_search_和_add.setVisibility(View.VISIBLE);
}
f1=f2;
}否则如果(f2-f1<-50){
rl_search_和_add.setVisibility(View.GONE);
f1=f2;
}
打破
case MotionEvent.ACTION\u UP:
f1=-1;f2=-1;
打破
}
返回false;
}
});

这种行为可能有几个原因

  • 用户可能有点错过了列表,其他组件处理了
    MotionEvent.ACTION\u DOWN
    操作,但无论用户如何继续拖动并点击列表视图区域,您都会收到
    MotionEvent.ACTION\u MOVE
    操作
  • 另一种可能性是,您必须更改许多事件,并且它们被移动到历史事件,而您只收到最新的事件。您可以使用的所有历史方法来查看它们

您应该像这样覆盖onInterceptTouchEvent:

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            yDown = event.getRawY();
            break;
        default:
            break;
    }
    return super.onInterceptTouchEvent(event);
}

然后使用yDown到您的程序中

Hello,当拖动完成时,您应该向下移动一个动作,然后移动多个动作,最后向上移动一个动作。是这样吗?但是,我有很多动作,每次都有动作,但我只有5次动作。昨天我让阿西顿跳了两次。没意思。太可怕了。有人告诉我一些我不知道的事情。把动作吞下去?谢谢你的关注。你看过医生了吗?当手指触摸屏幕时触发ACTION_DOWN(向下),当手指离开屏幕时触发ACTION_UP(向上),当手指移动时触发ACTION_MOVE(多次)。什么事困扰着你?