我有一个应该处理触摸的容器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
?
答案 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。