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 に答える