如果按下了“列表项”,请避免在Listview中处于ImageView悬停状态



我在最左边的listview里面有一个ImageView。此imageViewlistView具有所有状态(按下、选择、聚焦、正常)。如果我单击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

最新更新