在可滑动列表视图中具有onClickListener的视图无法再滑动,而仅响应onClick事件

时间:2019-03-27 15:06:03

标签: android android-listview ontouchevent swipe-gesture

我在此URL:https://jayrambhia.com/blog/swipe-listview之后实现了可滑动列表视图,唯一的区别是我只有MotionEvent.ACTION_DOWN和MotionEvent.ACTION_UP,并根据deltaX值检测MotionEvent.ACTION_UP中的运动。列表项的自定义视图,将这样的布局包装在Linearlayout中:

TextView1 | TextView2 TextView3

在刷卡之前,它看起来像:

enter image description here

最初,TextView2和3是隐藏的,在滑动该视图时,它们将显示为:

enter image description here

我为所有3个TextView都设置了onClickListener,并且发现onClickListener设置为TextView1时,如果从TextView1开始,则无法滑动,而且由于TextView2和3最初是隐藏的,因此仍然可以在TextView1之外滑动。看来TextView1只响应OnClickLisener。

我也尝试将其称为TextView1:

setClickable(true);
setEnabled(true);
setFocusable(true);
setFocusableInTouchMode(true);

我错过了什么?任何提示将不胜感激。预先感谢!

已编辑:

我注意到,如果我将手指放在TextView1和它的父级Linearlayout之间,则滑动将起作用。如此看来,子视图(TextView1)由于子视图的onClickListener禁用了其父视图(Linearlayout)onTouchListener?从子视图开始滑动时如何获取onTouchEvent?

1 个答案:

答案 0 :(得分:0)

我会针对我的情况发布答案。请检查以下网址以获取实现可滑动列表视图的代码:https://jayrambhia.com/blog/swipe-listview

在我的代码中,我将触摸侦听器附加到listview项的布局视图(convertView):

convertView.setOnTouchListener(new SwipeDetector(viewHolder, position, data, mContext));

我还为该convertView的视图持有者的“ TextView1”附加了相同的触摸侦听器:(这使得“ TextView1”的刷卡工作正常。

TextView1.setOnTouchListener(new SwipeDetector(this, position, data, act));

哪里

data - a java class holding the information for each list item;
position - a index of the list item
act / mContext - the activity instance
viewHolder - View holder class defined in the adapter
this - the Viewholder