1

カスタムリストを作成しようとしています。リスト アダプターでは、次のコードを getView(..) メソッドに実装しました。

        final RelativeLayout layout = (RelativeLayout) row.findViewById(R.id.layout_main);

        layout.setOnTouchListener(new View.OnTouchListener()
        {
            @Override
            public boolean onTouch(View v, MotionEvent event)
            {
                switch (event.getAction())
                    {
                        case MotionEvent.ACTION_DOWN:
                        {
                            layout.setBackgroundColor(context.getResources().getColor(R.color.asia_red_color));
                            return true;
                        }

                        case MotionEvent.ACTION_CANCEL:
                        case MotionEvent.ACTION_UP:
                        {
                            layout.setBackgroundColor(context.getResources().getColor(R.color.white));
                            return true;
                        }
                    }

                return false;
            }
        });

実装したリスナーは、MainActivity に実装した onItemClickListener の実行を防止/オーバーライドすることに注意してください。

解決策はありますか?

4

2 に答える 2

1

ちょうど持っているOnItemClickListener

セレクターを定義する

drawable フォルダー内の bkg.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@color/white" />
<item android:drawable="@color/yellow" />
</selector>

セレクターをリストビューに設定します。カスタムレイアウトへandroid:background="@drawable/bkg"

color.xml で色を定義する

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="white">#FFFFFF</color>
    <color name="yellow">#FFFF00</color>
</resources>

また、lsitview の行項目にボタンがあるかどうかも確認してください。ボタンをクリックするとフォーカスが移る場合があります。

于 2013-10-31T08:05:04.990 に答える
0

ここで何が起こっているのかわかりませんが、次のように のブランチでOnTouchListenerスーパー クラスのを呼び出すことができます。defaultswitch

layout.setOnTouchListener(new View.OnTouchListener()
    {
        @Override
        public boolean onTouch(View v, MotionEvent event)
        {
            switch (event.getAction())
                {
                    case MotionEvent.ACTION_DOWN:
                    {
                        layout.setBackgroundColor(context.getResources().getColor(R.color.asia_red_color));
                        return true;
                    }

                    case MotionEvent.ACTION_CANCEL:
                    case MotionEvent.ACTION_UP:
                    {
                        layout.setBackgroundColor(context.getResources().getColor(R.color.white));
                        return true;
                    }
                    default: return super.OnTouchListener();
                }

        }
    });

私は現在ブラウザだけを使用しているため、構文が正しくない場合はご容赦ください。

于 2013-10-31T08:14:54.540 に答える