0

リストの項目がクリックされるたびに、リストビューの背景色を変更しようとしています。

    listView.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View view, int pos,
                long arg3) {

                listView.getChildAt(pos).setBackgroundResource(R.color.GREY);
        }
    });

ただし、このコードは期待どおりに動作しません。その動作は不規則です。2 つのアイテムの背景が一度に変化し、リストを下にドラッグすると、既に変更されている色のアイテムがリセットされることがあります。

誰でもここで私を助けることができますか?

どうも!ラフル

4

2 に答える 2

1

これをコードで使用し、

この xml ファイルを drawable フォルダーに配置します (必要に応じて色を変更します)。

listselector.xml

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

  <item  android:state_focused="false" android:state_pressed="false">

    <shape android:shape="rectangle">   
    <solid android:color="@android:color/transparent"/>

    <stroke android:width="2dp" android:color="@android:color/transparent" />
    <padding android:left="1dp" android:top="1dp" android:right="1dp"
        android:bottom="1dp" />
    </shape>
  </item>

   <item  android:state_focused="true" android:state_pressed="false">

    <shape android:shape="rectangle">

    <solid android:color="@color/listitemfocus"/>
    <stroke android:width="4dp" android:color="@android:color/transparent" />
    <padding android:left="1dp" android:top="1dp" android:right="1dp"
        android:bottom="1dp" />
    </shape>
  </item>

    <item android:state_pressed="true">

    <shape android:shape="rectangle">

    <solid android:color="@color/listitempress"/>
    <stroke android:width="4dp" android:color="@android:color/transparent" />
    <padding android:left="1dp" android:top="1dp" android:right="1dp"
        android:bottom="1dp" />
    </shape>
  </item>

</selector>

メインレイアウトで listview を使用しますandroid:listSelector:

 <ListView
                android:id="@+id/listView1"
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:layout_below="@+id/parent_image_view"
                android:layout_centerHorizontal="true"
                android:cacheColorHint="@android:color/transparent"
                android:listSelector="@drawable/listselector"
                android:scrollbars="none" />
于 2012-04-25T17:59:36.060 に答える
0

これは、リストビュー(行)のアイテムがパフォーマンス向上のためにリサイクルされるために発生します...ビューが画面に表示されていない場合..次の要素の新しいビューを作成する代わりに..前のビューが新しいコンテンツで表示されます...したがって、色を変更するアイテムを追跡する必要があります...この例を見ることができます...私はそれが役立つと思います...そこで彼はデータを管理するためにビューホルダークラスを使用しています。 .uはcolcourの変数を入れることもできます..そしてアイテムの背景色をチェックすることができます..

于 2012-04-25T18:03:08.787 に答える