如何按root视图为所有孩子捕获单击事件?

时间:2018-09-17 14:39:22

标签: android try-catch children

请参见下面的代码,并告诉我其解决方案。

我下面有相同的树形视图

<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"

上面为儿童设置的false,但:(

3 个答案:

答案 0 :(得分: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;
    }
});

答案 1 :(得分: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事件,从而从子视图中窃取点击。

这个问题对我来说有点奇怪。你打算做什么?当用户单击时,您希望根据父级具有多少个子视图来发生几件事?

答案 2 :(得分:0)

我发现了问题

我曾经使用android:inputType="text"进行textView,删除此后,一切正常。

使用android:inputType="text"时,任何未传递给父项的触摸事件:(