Android ListView onTouchEvent 并不总是给出 ACTION_DOWN

标签 android listview touch-event

我的问题是,当我试图在我的 ListView 中拖动一个项目时,我并不总是得到 ACTION_DOWN 事件。我收到了很多 ACTION_MOVE 事件,只有一个 ACTION_UP 事件。 情况并非总是如此。我得到 ACTION_DOWN 3 次。这让我很困惑。

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

谢谢

//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;
    }
});

最佳答案

这种行为可能有多种原因。

  • 用户可能错过了列表,MotionEvent.ACTION_DOWN 已由其他组件处理,但无论用户如何继续拖动并点击您的 ListView 区域,您都会收到 MotionEvent.ACTION_MOVE Action 。
  • 另一种可能性是,你有很多事件,它们被移到了历史事件中,而你只收到了最新的事件。您可以使用MotionEvent的所有历史方法去看他们。

关于Android ListView onTouchEvent 并不总是给出 ACTION_DOWN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17965291/

相关文章:

android - 如何操作 listview 以便特定电话号码始终显示在顶部?

iphone - 自定义 NavigationItem 的 TouchUpInside 事件在边界外

android - 在Eclipse中添加库v7 AppCompat时如何解决错误 "No resource found that matches the given name"?

java - Android 图库 View ,其中图像保存在 sqlite 中作为 blob

android - 如何禁用或不显示来自 emilsjolander 的 StickyListHeaders 的任何 header

android - 为什么 onTouchEvent getPointerCount() 方法总是返回 1?

android - ScrollView 回到顶部

android - Gradle Release 构建(使用 Proguard)连续运行 Android 3.0.1

带有 CSS 的 Android 应用

c# - Xamarin.Forms ListView 更改 Cell on ContextMenu 打开