1

我在最左边的位置有一个ImageView内部。它具有所有状态(按下、选定、聚焦、正常)。如果我单击但不是在某些设备中,则调用悬停状态(选定、聚焦、按下)。所以我想知道如何避免这种情况。listviewimageViewlistViewListViewImageViewImageView

4

2 回答 2

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)中的效果相同。这允许行是可点击的。override 方法解决了您在此处提到的问题,即(父)中的按下事件波及(子)。android:focusable="false"xmlListViewonPressedListViewImageView

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

于 2013-02-26T18:30:22.827 回答
-1

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

于 2013-02-14T07:19:28.423 回答