【问题标题】:Click events doesn't bubble up in RecyclerView点击事件不会在 RecyclerView 中冒泡
【发布时间】:2015-01-30 11:53:49
【问题描述】:

我想知道为什么如果我在 RecyclerView 内单击,click 事件不会冒泡。

我的场景使用一个简单的RecyclerView 来显示一些TextViews,而它的父View 注册了一个OnClickListener,以便在有人点击视图时执行一些操作。 如果我点击例如TextView 点击事件正确地冒泡到父级。但如果我点击RecyclerView,点击不会冒泡。 奇怪的是,如果我直接在RecyclerView 上设置OnClickListener,它也永远不会被解雇。我认为这是万恶之源。

那么,为什么我的RecyclerView 没有收到任何点击事件?为什么它的父级没有收到任何点击事件?

层次结构如下所示:

- View (has an OnClickListener)  <- Why no clicks?
    - RecyclerView (clickable=false)
        - TextView
        - TextView
        ....

我尝试了setFocusable()setClickable(),但没有运气。

PS:我当前的解决方案在RecyclerView 内的每个TextView 上设置一个OnClickListener,并使用getParent() 手动使用performClick() 将点击传播到父视图。

【问题讨论】:

  • 如果我没有遗漏什么,你是对的。 RecycleView 不会冒泡事件。

标签: android events android-view


【解决方案1】:

我使用RecyclerView 的特殊类处理程序RecyclerView.OnItemTouchListener。我可以从消费类中添加。这是处理程序类的默认实现:

recyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {

        @Override
        public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
            //Put your code here.
            //Called 2 times per touch, on pressdown and on release.

            return false; //true will disable scroll view. 
        }

        @Override
        public void onTouchEvent(RecyclerView rv, MotionEvent e) {
            setDefaultBottomBar();
        }

        @Override
        public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

        }
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多