2012-12-28 103 views
0

这看起来不像一个典型的视图布局,我遇到了麻烦。搞乱触摸/点击事件

我有两个listViews。

每个listViewtouchListener
(其目的是通过调用dispatchTouchEvent()到另一个的ListView同步滚动)

ListView也有onItemClickListener来处理的ListView行的点击。

一切按预期运作到这里。

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

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

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

我可以考虑两个解决方法来解决这个问题。

  1. 连接touchListener而不是clickListener儿童,并使其return false所有触摸事件,除了FINGER_UP事件。
    FINGER_UP事件,我执行我最初有在onClickListener

  2. 公共布尔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); 
           } 
          }); 
    

回答

0

我想补充另一个clickListener到子视图组ListView的行处理点击子视图事件。

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

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

+0

感谢您的详细解答。我替换了我的代码以遵循您的策略,但它遇到了同样的问题。行的onclicklistener是令人不安的滚动列表视图(父) – eugene

+0

我认为在ListView的子视图上设置onClickListener防止子视图传递触摸事件到父(列表视图) – eugene

+0

嗯,我似乎没有这个问题。将您的代码发布到设置了OnClickListener的位置,以便我可以看到发生了什么。 – Sam