4

選択したアイテムをカスタムの方法で強調表示したいリストビューがあります。を含む、アダプターのgetViewメソッドですべてのアイテムのプロパティを設定していますitemView.setSelected(true)

メイン レイアウトは、リストビューを次のように定義します。

<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:choiceMode="multipleChoice"
android:listSelector="@drawable/list_selector" />

(選択モードで遊んでも役に立ちません)。

list_selectorはほとんど空のスタブです

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

リストビュー全体に特定のスタイルは必要ないので、デフォルトのままにしますが、この回答によると、アイテムセレクターのリストビューのセレクターが必要です。とにかく、list_selectorがなければ問題は残ります。

リストビュー アイテムのレイアウト:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:background="@drawable/listitem_background"
    android:orientation="vertical">

そして、次のlistitem_backgroundセレクターを参照します。

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

問題は、選択したアイテムの背景が白でないことです。

たとえば、listitem_backgroundandroid:state_selected="true"のセレクターを に変更すると、セレクターが機能し始めます。つまり、アイテムに触れるとアイテムの背景が白くなります。android:state_pressed="true"

したがって、セレクターまたはアイテムの選択方法にエラーがあると思います。

Java からバックグラウンドを設定するか、チェック可能な状態を利用することで回避策を作成できますが、セレクターに関する現在の問題を理解し、修正したいと考えています。前もって感謝します。

4

2 に答える 2

0

選択したリスト項目を変更するには、これを試してください。リスト ビュー内に配置します。

if (currentSelectedView != null && currentSelectedView != v) {
                unhighlightCurrentRow(currentSelectedView);
            }

            currentSelectedView = v;
            highlightCurrentRow(currentSelectedView);



private void unhighlightCurrentRow(View rowView) {
        rowView.setBackgroundColor(Color.TRANSPARENT);//to set a color for un-seclected row
    }

    private void highlightCurrentRow(View rowView) {
        rowView.setBackgroundResource(R.drawable.selector_img);//to set a color for seclected row
    }
于 2013-04-01T11:05:11.007 に答える