如果按下列表项,则在Listview内避免ImageView悬停状态

时间:2013-02-14 06:46:50

标签: android android-listview

我的最左侧位置ImageViewlistviewimageViewlistView包含所有状态(按下,选中,聚焦,正常)。如果点击ListView但不是ImageView然后在某些设备中调用ImageView的悬停状态(选中,聚焦,按下)。 所以我想知道如何避免这种情况。

2 个答案:

答案 0 :(得分:1)

以下是解决此问题的步骤。使用以下代码创建名为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(子)。

定义此类后,您可以使用ImageView替换xml布局中的com.MYCOMPANY.MYAPP.NoParentPressImageView。编译并运行,ListView现在应该按预期运行,ImageView按下的事件仅在您实际点击图像时触发,而不是在您单击行中的其他位置时触发。

答案 1 :(得分:-1)

尝试将android:focusable="false"添加到布局文件中的ImageView