1つのリストビューcontactslist
があります。 ListView
で選択したアイテムを強調表示するためのコードを書きました。動いています。 1つのアイテムをクリックすると、そのアイテムが強調表示されますが、他のアイテムをクリックすると、それも強調表示されます。選択したアイテムのみを強調表示します。別のアイテムをクリックすると、前の選択が消える必要があります。
arg1.setBackgroundResource(R.drawable.highlighter);
これは、選択したアイテムを強調表示するために使用するクリックリスナーのコードです。 plzは私を助けます。
更新
アダプターの行の背景を設定しています:
public int[] colors = new int[]{0xFFedf5ff, 0xFFFFFFFF};
public int colorPos;
[...]
colorPos = position % colors.length;
row.setBackgroundColor(colors[colorPos]);
ListViews
はデフォルトでchoiceMode
セットを持たないため(none
に設定されます)、現在の選択は視覚的に示されません。
これを変更するには、choiceMode
のListView
属性をsingleChoice
に設定するだけです。
リストで選択したアイテムのカスタム背景が必要な場合は、listSelector
属性も設定する必要があります。そこでは、色だけでなく、ドロウアブル(画像、レイヤー/状態ドロウアブル)を指定できます。
<ListView Android:id="@+id/my_list"
Android:choiceMode="singleChoice"
Android:listSelector="@Android:color/darker_gray" />
ListView
を直接使用せず、ListActivity
を使用する場合、これらの属性はコードから設定する必要があるため、アクティビティのonCreate
メソッドをこれらの行で拡張する必要があります。 :
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
getListView().setSelector(Android.R.color.darker_gray);
したがって、クリックリスナーを使用して選択した行の背景を変更している場合は、コードからそれを削除し、上記の適切な方法を使用します。
更新に返信
GetViewメソッドから背景を設定する場合、静的な色を使用する代わりに、duplicateParentStateをtrueに設定して、行の背景に描画可能な状態リストを適用します。このように、アイテムの現在の状態に基づいて表示を変更します:通常、フォーカス、押されたなど。
リストビューxmlで「singleChoice」モードを追加します
<ListView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:choiceMode="singleChoice"
(...) >
</ListView>
リストアイテムレイアウトに追加
Android:background = "?android:attr/activatedBackgroundIndicator
例
<?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:orientation="horizontal"
Android:background="?android:attr/activatedBackgroundIndicator">
<!-- your item content-->
</LinearLayout>
より良い方法は、あなたのテーマ、@ drawable/list_selectorにあります
list_selector.xml:
<!-- <item Android:drawable="@color/Android:transparent" Android:state_selected="true" /> -->
<item Android:drawable="@color/list_bg" Android:state_selected="true"/>
<item Android:drawable="@color/list_bg" Android:state_activated="true"/>
<item Android:drawable="@color/transparent"/>
次に、list_row.xml Android:background = "?android:attr/activatedBackgroundIndicator"のルートの背景を設定します
onListItemClick
でこれを試してください
view.getFocusables(POSITION);
view.setSelected(true);
選択を強調表示します。