请看下面的代码,并告诉我它的解决方案。
我下面有树视图
<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"
对于孩子而言是假的,但是:(
尝试使用OnTouchListener而不是OnClickListener
ViewGroup parent = findViewById(R.id.parent);
parent.setOnTouchListener(new View.OnTouchListener {
public boolean onTouch(View v, MotionEvent event) {
//do smth
return true;
}
});
您需要在添加到父级的每个子级上设置单击侦听器。就像是:
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事件,窃取子视图中的点击。
这个问题对我来说有点奇怪。你有什么行为?当用户点击时,您希望发生几件事情,具体取决于父母有多少子视图?
我发现了问题,
我使用android:inputType="text"
for textView,删除后,一切都还可以。
当使用android:inputType="text"
任何触摸事件没有传递给父母,:(