В вашем коде было много ошибок, поэтому я сделал это снова с нуля, чтобы помочь вам.Попробуйте мой приведенный ниже рабочий код для селектора с Recyclerview
.
. Обратите внимание Каждое состояние в вашем селекторе белое, поэтому оно не было видно на экране
На уровне вашего приложения build.gradle
добавьте
внедрение 'androidx.recyclerview: recyclerview: 1.0.0'
В MainActivity.kt
добавить
private lateinit var linearLayoutManager: LinearLayoutManager
private lateinit var myAdapter: RcvAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val listItems = listOf("IDENTITY CARD", "PASSPORT", "DRIVER'S LICENSE")
linearLayoutManager = LinearLayoutManager(this)
sample_RCV.layoutManager = linearLayoutManager
myAdapter = RcvAdapter()
sample_RCV.adapter = myAdapter
myAdapter.updateList(listItems)
}
}
В
activity_main.xml
добавить
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/sample_RCV"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
Создать
RcvAdapter.kt
и добавить
class RcvAdapter : RecyclerView.Adapter<RcvAdapter.Holder>() {
private var documentsList: List<String>? = null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
return Holder(LayoutInflater.from(parent.context).inflate(R.layout.recv_layout, parent, false))
}
fun updateList(mList: List<String>) {
this.documentsList = mList
notifyDataSetChanged()
}
override fun onBindViewHolder(holder: Holder, position: Int) {
holder.updateUi(documentsList!![position])
}
override fun getItemCount(): Int {
return documentsList!!.size
}
inner class Holder(itemView: View) : RecyclerView.ViewHolder(itemView) {
private var my_tv: TextView = itemView.findViewById(R.id.my_tv)
fun updateUi(text: String) {
my_tv.text = text
}
}
}
Создать
recv_layout.xml
и добавить
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/my_tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/list_item_text_selector"
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center"
android:padding="10dp"
android:text="Item_1"
android:textSize="12sp" />
</LinearLayout>
И, наконец, в
drawable
создайте
list_item_text_selector.xml
и добавьте.
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/color_white" android:state_activated="true"/>
<item android:drawable="@color/color_white" android:state_pressed="true"/>
<item android:drawable="@color/color_white" android:state_checked="true"/>
<item android:drawable="@color/color_white" android:state_focused="true"/>
<item android:drawable="@color/color_white_gray"/>
</selector>
В
colors.xml
добавить
<color name="color_white">#FFFFFF</color>
<color name="color_white_gray">#808080</color>
Надеюсь, это поможет.