【问题标题】:messing with touch / click events弄乱触摸/点击事件
【发布时间】:2012-12-13 12:03:48
【问题描述】:

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

我有两个列表视图。

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

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

到目前为止,一切都按预期工作。

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

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

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

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

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

  2. public boolean 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);
                    }
                });
    

【问题讨论】:

    标签: android click touch listener


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的详细回答。我替换了我的代码以遵循您的策略,但它遇到了同样的问题。行的 onclicklistener 扰乱列表视图(父)的滚动
    • 我认为在 listview 的子视图上设置 onClickListener 会阻止子视图将触摸事件传递给父视图(列表视图)
    • 嗯,我好像没有这个问题。将您的代码发布在您设置 OnClickListener 的位置,以便我查看发生了什么。
    • 好的,我重新创建了你所看到的。我尝试了这个和那个,很快我的代码似乎太长了而且还没有真正工作......但我有假装 ListViews 的想法。为什么不构建一个巧妙的行布局,让一个 ListView 看起来像两个呢? ListViews 将始终“同步”,您可以根据需要设置任意数量的子组单击侦听器。目前,我认为这种方法是最简单也是最好的策略。
    • 实际上我的行高度不一样。我正在尝试模仿 pinterest 布局
    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    • 1970-01-01
    相关资源
    最近更新 更多