Android触摸事件陷入了ListView

时间:2016-03-27 15:59:51

标签: android listview android-touch-event

我有一个应该处理触摸的容器View。它有Listview覆盖onTouch(),返回false(当通过滑动扩展容器时,它将返回true)。当Listview触摸发生时,它会传递到容器View,一切正常。但是我需要为Listview的项添加点击处理。

当我为item设置onClickListener时,我在日志中看到没有MotionEvent传递给容器,它被卡在ListView onTouch()中(返回{{1}并且什么也没做。我正在尝试将false设置为这样的项目:

onTouchListener

但结果是一样的。有人可以解释为什么我的容器没有接收到触摸事件,即使 viewHolder.itemLayout.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: return true; case MotionEvent.ACTION_MOVE: return false; case MotionEvent.ACTION_UP: Log.d(TAG, "something like click detected"); return true; } return false; } }); 返回ListView因为其覆盖的false

2 个答案:

答案 0 :(得分:1)

如果您希望处理ListView项目的点击次数:使用OnItemClickListener

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            //parent.getItemAtPosition(position) returns the value of item clicked.. use it to do whatever you wish to do
        }
    });

答案 1 :(得分:1)

我在两周前遇到了同样的问题。从listview的onTouch方法返回false并未将事件传递给父容器。我最终这样做了: 1.您需要为容器meshgrid定制布局。然后在该视图中,重写onInterceptTouchEvent,例如:

View

我在该视图中也有复杂的onTouch方法,但它不值得粘贴。要点是,如果在ACTION_MOVE时传递了一些阈值,那么您的父视图应该只拦截触摸事件 - 至少这是我想要实现的目标。然后在listview中,您只需实现标准的onItemClickListener而不是onTouch。