onListItemClick
イベントを使用して、選択したアイテムの背景色を変更するListViewがあります。
@Override
public void onListItemClick(final ListView l, final View v, final int position, final long id)
{
v.setBackgroundColor(Color.GRAY);
}
単一のビューの背景色を変更する前に、ListViewのすべての行を元の色にリセットすることは可能ですか?問題は、選択した各アイテムが背景色を保持し、ユーザーがクリックした最新のアイテムのみを変更したいということです。
アップデート:
JRaymondの応答が最善のアプローチのようですが、Androidレイアウトで作業する場合は通常、コードを挿入しても何も起こりません。それをデバッグする方法も、エラーメッセージも、何もありません。私はAndroidレイアウトを扱うのが絶対に嫌いです。それは、UIを扱うための最も複雑で、ひどく実装されたデザインです。
とにかく、これは私がこれまでに持っているものです:
リストビュー:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
>
<ListView android:id="@android:id/list"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:choiceMode="singleChoice"
android:listSelector="@drawable/listing_selector"
/>
<TextView android:id="@android:id/empty"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:padding="5dp"
/>
</LinearLayout>
Listing_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_focused="true" android:drawable="@android:color/transparent" />
<item android:state_pressed="true" android:drawable="@android:color/transparent" />
<item android:state_selected="true" android:state_activated="true" android:drawable="@android:color/black" />
<item android:state_activated="true" android:drawable="@android:color/transparent" />
<item android:state_selected="true" android:drawable="@android:color/transparent" />
<item android:drawable="@android:color/transparent" />
</selector>
私が言ったように、アイテムをクリックしても何も起こりません。組み込みのハイライトも消えています。すべての色を黒に変えてみましたが、何も起こりません。
UPDATE2:
近づいています。この記事を読んだ後、 selector
xmlをcolor
下という名前のフォルダーに配置する必要があります。次に、それ自体ではなく、内の各アイテムのレイアウトの背景としてres
を設定します。selector
ListView
ListView
<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:background="@color/listing_selector"
>
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</RelativeLayout>
各アイテムをタッチすると背景色が点滅しますListView
が、元の背景色に戻らないままです。これは私が使用しているセレクターです:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="false" android:state_pressed="false" android:drawable="@android:color/transparent" />
<item android:state_pressed="true" android:drawable="@color/blue" />
<item android:state_selected="true" android:state_pressed="false" android:drawable="@color/blue" />
</selector>
color.xml:
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<color name="blue">#ff33b5e5</color>
</resources>
これはお尻の絶対的な痛みです。UIを処理するためのこのひどいシステムを思いついた人は誰でも解雇されるべきです。
解決:
100%確実ではありませんが、これはAndroid3.0以降のデバイスでのみ機能する可能性があります。state_activated
背景色を設定するものです。