请参见下面的代码,并告诉我其解决方案。
我下面有相同的树形视图
<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,但:(
答案 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"
时,任何未传递给父项的触摸事件:(