Android ListView onTouchEvent并不总是提供ACTION_DOWN

时间:2013-07-31 08:28:45

标签: android listview ontouchevent

我的问题是,当我尝试在ListView中拖动一个项目时,我并不总是得到ACTION_DOWN事件。我有很多ACTION_MOVE事件,只有一个ACTION_UP事件。 情况并非总是如此。我有3次ACTION_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;
    }
});

2 个答案:

答案 0 :(得分:1)

这种行为可能有几个原因。

  • 可能是用户错过了列表并且MotionEvent.ACTION_DOWN已被其他组件处理,但是用户如何继续拖动并点击列表视图区域,您收到了MotionEvent.ACTION_MOVE个操作。
  • 另一种可能性是,你必须参加许多活动,并且他们被转移到了历史事件,你只收到了最新的活动。您可以使用MotionEvent的所有历史方法来查看它们。

答案 1 :(得分:0)

你应该像这样重写onInterceptTouchEvent:

    String s1;
    Set<String> s=new TreeSet();
    for( int i=1;i<10;i++)
    {
       s1=null;
        s1=""+i;
        for(int j=0;j<10;j++)
        {
           String tempj=s1;
            s1=s1+j;
            for(int k=0;k<10;k++)
            {
                String tempk=s1;
            s1=s1+k;
            int temp=i+j-k;
            s1=s1+temp;
            if(temp<10)
            s.add(s1);
            s1=tempk;
            }
          s1=tempj;  
        }

    }

    for(String i:s )
    System.out.println(i+);

然后将yDown用于您的程序