課題
同じレイアウトファイルを使うが色が異なる2つのパーツがあり、
プログラム上からselectorを設定し、isSelectedを使ったがsetTextColorとsetBackgroundColorが機能しない。どうすればいいか。
対応
TextColorの場合
プログラム上からsetTextColorでSelectorを使うには引数にcolorStateListを渡す必要がある。ContextCompat.getColor()では駄目で、
ContextCompat.getColorStateListを使う
viewHolder.label?.setTextColor(ContextCompat.getColorStateList(context, R.color.selector_text))
背景色の場合
setBackgroundColorではなくsetBackgroundResourceを使う
selector_bg.xml <?xml version="1.0" encoding="utf-8" ?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/dark" android:state_selected="true"/> <item android:drawable="@color/white" android:state_selected="false" /> </selector>
viewHolder.itemView.setBackgroundResource(R.drawable.selector_bg)