0

次のスクリプトは、(たとえば) ListItem の位置 1 の色を設定しますが、番号 12 (11+1) にも素敵な灰色を与えます。これはAndroidの何らかのバグですか?

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    ListView.setSelection(arg2);
    arg1.setBackgroundColor(Color.LTGRAY);
    adapter.notifyDataSetChanged();
}
4

2 に答える 2

1

ListViewビューをリサイクル (再利用) します。したがって、背景色をビューではなくdataに関連付ける必要があります。次に、データgetView()に基づいて背景色を正しく設定する機会があります。

于 2013-10-30T16:37:43.600 に答える
0

@David Wasserは正しいです...セルの再利用により、複数のリストビュー行が灰色の背景で描画されます。

ただし、SELECTION STATE に基づいて背景を設定しようとしている場合は、次の手法を検討してください。

// set single or multi-select on your list (CHOICE_MODE_SINGLE = single row selectable)
// do this in onCreate
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
.
.
.
// in your onItemClick, set the checked state of the item
// you DO NOT need to call notifyDataSetChanged
listView.setItemChecked(position, true);

また、リストビュー セル レイアウトの背景を組み込みセレクターまたはカスタム セレクターに設定します。

ビルトイン:

android:background="?android:attr/activatedBackgroundIndicator"

習慣:

android:background="@drawable/myListBackground"

drawable/myListBackground.xml :

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

キーは、項目が選択/チェックされたときに使用される state_activated エントリです。他の状態の色を指定することもできます。上記の例では、colors.xml テーブルから色を参照しています。

詳細については、「?android:attr/activatedBackgroundIndicator」はどのように機能しますか?を参照してください。

于 2013-10-30T16:55:34.777 に答える