ListViewの選択されたアイテムの背景色を変更

ListViewの行をタップして選択した後も選択された行の背景色を変えたままにする方法を紹介します。

res/drawable/list_item_selector.xml

タッチした時とタッチ後の色を変えるためのselectorを定義します。



android:drawable="@color/selected_list_item_color"/>
android:drawable="@color/selected_list_item_color"/>


res/values/colors.xml

list_item_selector.xmlで参照する色を定義します。



#ffd33f
#000000

res/layout/list_row.xml

ListViewの行を定義するレイアウトのbackgroundに上記のlist_item_selectorを設定します。

    
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/list_item_selector"
>
android:id="@+id/symbol_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="symbol"
/>

scala/MainActivity.scala

ListViewのItemClickListenerでクリックされたアイテムに対してsetSelected(true)を呼び出します。
こうすることでlist_item_selectorで設定したstate_selected=”true”の条件にマッチするようになります。

val unitList = findView(TR.unit_list)
unitList.setOnItemClickListener(new OnItemClickListener {
def onItemClick(parent: AdapterView[_], view: View, pos: Int, arg3: Long) {
view.setSelected(true)
}
})