これは、この質問やこの質問のような質問で何度も議論されてきたことを知っています. しかし、私にはそれがうまくいかないと言わざるを得ません。
私が達成したかったのは、特別な状況で CustomAdapter を介して ListView アイテムをマークすることです。したがって、ユーザーとクリック リスナーを介してではありません。背景ドローアブルをconvertViewに設定することで、実用的な解決策があります。
今、私はこれを変更して、よりクリーンなソリューションであるセレクターに仕事をさせたいと思っています。しかし、私はそれを機能させることができません。アイテムを押したときの動作を設定し、別の色を設定しても問題ありません。しかし、アイテムを押した後、選択済みとしてマークすることはできません。
listview_item_selector と listview_selector でさまざまな組み合わせを試しました。そして、私は非常に一般的なことを見逃していると思います。そのため、アイテムが押された後にアイテムにマークを付ける方法を理解するためだけにセットアップを作成しました。
これが私のlist_item_selectorです:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@android:color/transparent"/>
<item android:state_selected="true" android:drawable="@android:color/transparent"/>
<item android:drawable="@drawable/state_normal"/>
</selector>
そして、listview_selector をセレクターとして ListView に設定しました。
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/state_pressed"></item>
<item android:state_selected="true" android:drawable="@drawable/selected_item"/>
</selector>
私が言ったようにstate_pressed
働いています。しかしstate_selected
、私を夢中にさせます。
カスタム項目の少なくとも私のレイアウト:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/listview_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/listview_item_selector">
<TextView
android:id="@+id/list_tv1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#FFFFEE"/>
<TextView
android:id="@+id/list_tv2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#FFEEEE"/>
</LinearLayout>
提案をいただければ幸いです。