这看起来不像一个典型的视图布局,我遇到了麻烦。搞乱触摸/点击事件
我有两个listViews。
每个listView
有touchListener
(其目的是通过调用dispatchTouchEvent()到另一个的ListView同步滚动)
ListView
也有onItemClickListener
来处理的ListView行的点击。
一切按预期运作到这里。
我想添加另一个clickListener
到subview-group of the listView's
行来处理子视图上的点击事件。
附加此clickListener后,我看到listView的滚动并不总是工作。
我怀疑它是因为此子视图的clickListener正在检查父级(listView)的touchListener之前的触摸事件(以查看它的确是否为click
)。
我可以考虑两个解决方法来解决这个问题。
连接touchListener而不是clickListener儿童,并使其
return false
所有触摸事件,除了FINGER_UP
事件。
上FINGER_UP
事件,我执行我最初有在onClickListener公共布尔onInterceptTouchEvent(MotionEvent EV)
实现此方法可拦截所有触摸画面运动事件的方法。这允许您在事件发送给您的孩子时观看事件,并在任何时候掌握当前手势的所有权。
(好吧...我很困惑,我想触摸事件进入子视图第一和传播给家长,如果孩子不处理触摸..)
...我如何落实方法1?
..请帮我弄清楚#2,并掌握触摸传递机制。
编辑 - 这是我加入OnClickListener到我的子视图。
viewHolder.layout_author.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent profileIntent = new Intent(ImageListAdapter.this.activity, ProfileActivity.class); profileIntent.putExtra("JsonUser", jsonAlbumImage.jsonUser); ImageListAdapter.this.activity.startActivity(profileIntent); } });
感谢您的详细解答。我替换了我的代码以遵循您的策略,但它遇到了同样的问题。行的onclicklistener是令人不安的滚动列表视图(父) – eugene
我认为在ListView的子视图上设置onClickListener防止子视图传递触摸事件到父(列表视图) – eugene
嗯,我似乎没有这个问题。将您的代码发布到设置了OnClickListener的位置,以便我可以看到发生了什么。 – Sam