0

現在、ListView アイテムのバックグラウンド ドローアブルに関する問題に直面しています。私は ListView XML、Item XML、および 1 つのアイテムが持つことができる異なる状態用の Drawable XML を持っています。

問題は、項目の 1 つをクリックまたは押しても視覚的には何も変化しないことですが、オーバーライドした onItemClick() メソッドが呼び出され、そのコードが実行されるため、クリックは機能します... @background パラメータを設定しなかったようです!

layout/my_activity.xml (リストビューを含む):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/background"
    android:orientation="vertical" >

    <include ... />

    <include ... />

    <View
        ... />

    <ListView
        android:id="@+id/listViewPacks"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:divider="@color/blue_vdark"
        android:dividerHeight="2dp" >
    </ListView>

</LinearLayout>

layout/listview_item_a.xml :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/listview_item_a_d"
    android:orientation="vertical"
    android:padding="5dp" >

    <TextView
        ... />

    <TextView
        ... />

    <TextView
        ... />

</LinearLayout>

drawable/listview_item_a_d.xml :

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_selected="true"><shape>
            <gradient android:angle="270" android:endColor="#bbbbbb" android:startColor="#e9e9e3" />
        </shape></item>
    <item android:state_enabled="true"><shape>
            <gradient android:angle="270" android:endColor="#ecca2e" android:startColor="#f9f7c9" />
        </shape></item>
    <item><shape>
            <solid android:color="@color/gray_dark" />
        </shape></item>

</selector>
4

2 に答える 2

2

まず、タッチモードでは選択状態またはフォーカス状態が持続しません。

を使用することでこれを回避できますstate_activated

これは、リストの選択モードを単一または複数に設定することで実現できます (デフォルトはなし)。

getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

次に、セレクター XML でアクティブ化された状態を使用します。

<item android:state_activated="true">
    <shape>   
        <gradient android:angle="270" android:endColor="#bbbbbb" droid:startColor="#e9e9e3" />   
    </shape>
</item> 

API 11以降の場合に注意してください...以前のバージョンでは、選択した状態を追跡し、それを使用してアダプターメソッドstate_activatedで背景色/ドローアブルを設定するには、カスタムアダプターの配列を使用する必要があると思います.getView

于 2012-07-04T22:14:18.650 に答える
0

ListView にアダプターがあり、getView メソッドでビューの背景を変更したことが問題だったので、セレクターが後ろに描画されたか、まったく描画されなかったと思います。とにかく、これらのコード行を削除したところ、正常に動作するようになりました。ありがとう!

于 2012-07-21T15:19:22.593 に答える