我在最左边的listview
里面有一个ImageView
。此imageView
和listView
具有所有状态(按下、选择、聚焦、正常)。如果我单击ListView
而不是ImageView
,则在某些设备中会调用ImageView
的悬停状态(选择、聚焦和按下)。所以我想知道如何避免这种情况。
以下是解决此问题的步骤。使用以下代码创建一个名为NoParentPressImageView
的类:
public class NoParentPressImageView extends ImageView {
public NoParentPressImageView(Context context) {
this(context, null);
this.setFocusable(false);
}
public NoParentPressImageView(Context context, AttributeSet attrs) {
super(context, attrs);
this.setFocusable(false);
}
@Override
public void setPressed(boolean pressed) {
// If the parent is pressed, do not set to pressed.
if (pressed && ((View) getParent()).isPressed()) {
return;
}
super.setPressed(pressed);
}
}
请注意,构造函数中的setFocusable(false)
与将android:focusable="false"
添加到xml
布局文档具有相同的效果。这允许ListView
行是可点击的。onPressed
覆盖方法解决了您在这里提到的问题,即ListView
(父级)中的按压事件波及到ImageView
(子级)。
一旦定义了这个类,就可以用com.MYCOMPANY.MYAPP.NoParentPressImageView
替换xml
布局中的ImageView
。编译并运行,ListView
现在应该如您所期望的那样运行,只有当您实际单击图像时才会触发ImageView
按下的事件,而不是当您单击行中的其他位置时。
尝试将android:focusable="false"
添加到布局文件中的ImageView
。