如何通过root视图捕获所有孩子的点击事件?

问题描述 投票:0回答:3

请看下面的代码,并告诉我它的解决方案。

我下面有树视图

<RelativeLayout id="parent">

    <RelativeLayout id="container1">
       <view .../>
    </RelativeLayout>

   <RelativeLayout id="container2">
       <view .../>
    </RelativeLayout>

</RelativeLayout>

在活动中:

ViewGroup parent = findViewById(R.id.parent);

parent.setOnClickListener(new ...);

我想点击父视图的任何孩子和孩子的孩子,父母的点击事件是火。

父视图是ListView的ViewHolder。

我测试了很多代码但没有工作

比如,添加到父根

android:clickable="true"
android:focusable="true"

对于孩子而言是假的,但是:(

android try-catch children
3个回答
0
投票

尝试使用OnTouchListener而不是OnClickListener

ViewGroup parent = findViewById(R.id.parent);
parent.setOnTouchListener(new View.OnTouchListener {
    public boolean onTouch(View v, MotionEvent event) {
        //do smth
        return true;
    }
});

0
投票

您需要在添加到父级的每个子级上设置单击侦听器。就像是:

private void setChildListener(View parent, View.OnClickListener listener) {
    parent.setOnClickListener(listener);
    if (!(parent instanceof ViewGroup)) {
        return;
    }

    ViewGroup parentGroup = (ViewGroup) parent;
    for (int i = 0; i < parentGroup.getChildCount(); i++) {
        setChildListener(parentGroup.getChildAt(i), listener);
    }
}

这将以递归方式设置每个视图(包括初始视图到同一个侦听器)。

您还可以尝试捕获onTouch事件,窃取子视图中的点击。

这个问题对我来说有点奇怪。你有什么行为?当用户点击时,您希望发生几件事情,具体取决于父母有多少子视图?


0
投票

我发现了问题,

我使用android:inputType="text" for textView,删除后,一切都还可以。

当使用android:inputType="text"任何触摸事件没有传递给父母,:(

© www.soinside.com 2019 - 2024. All rights reserved.