弄乱触摸/点击事件

时间:2012-12-28 06:56:22

标签: android click touch listener

这似乎不是我遇到麻烦的典型视图布局。

我有两个listViews。

每个listView都有touchListener
(其目的是通过调用dispatchTouchEvent()来同步滚动到另一个listView)

ListView还有onItemClickListener来处理listView行的点击次数。

一切都按照预期在这里工作。

我想在clickListener行添加另一个subview-group of the listView's来处理子视图上的点击事件。

附加此clickListener后,我看到listView的滚动并不总是有效。

我怀疑它是因为这个子视图的clickListener在父(listView)的touchListener之前检查触摸事件(以查看它确实是click)。

我可以想到这个问题的两个解决方法。

  1. 将touchListener而不是clickListener附加到子级,并为return false事件以外的所有触摸事件设置FINGER_UP
    FINGER_UP事件中,我执行了我最初在onClickListener中使用的方法

  2. public boolean onInterceptTouchEvent(MotionEvent ev)

    实施此方法以拦截所有触摸屏动作事件。这使您可以在将事件发送给您的孩子时观察事件,并在任何时候获取当前手势的所有权 (好吧......我很困惑,我认为触摸事件会首先传递给孩子的观点并传播给父母,如果孩子们没有处理这些事情的话......)

  3. ..如何实施方法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);
                      }
                  });
      

1 个答案:

答案 0 :(得分:0)

  

我想将另一个clickListener添加到listView行的subview-group,以处理子视图上的click事件。

您只需编写自定义适配器并在getView()中分配OnClickListener。您可以查看问题:Android GridView Button Click Handler,例如代码。

还有一段时间我回答Android. Scrolling 2 listviews together您是否使用类似的方法同步ListViews?当我将两个答案结合起来时,我的应用程序就会按照您想要的方式运行。我希望这会有所帮助。