web-dev-qa-db-ja.com

androidのリストビューで選択されたアイテムを強調表示する

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]);
41
andro-girl

ListViewsはデフォルトでchoiceModeセットを持たないため(noneに設定されます)、現在の選択は視覚的に示されません。

これを変更するには、choiceModeListView属性を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に設定して、行の背景に描画可能な状態リストを適用します。このように、アイテムの現在の状態に基づいて表示を変更します:通常、フォーカス、押されたなど。

114
rekaszeru

リストビュー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> 
26

より良い方法は、あなたのテーマ、@ 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"のルートの背景を設定します

8
subair_a

onListItemClickでこれを試してください

view.getFocusables(POSITION);
view.setSelected(true);

選択を強調表示します。

0
kanna