Android ListView Селектор элементов не работает - PullRequest
0 голосов
/ 18 марта 2019

Я пытаюсь создать дизайн для моего простого списка рассылки массива с использованием файла селектора, но он не работает.Я что-то упустил?

Просмотр моего списка

 <ListView
        android:id="@+id/docTypeListView"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_marginBottom="140dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toEndOf="@+id/imgActiveSec"
        app:layout_constraintTop_toTopOf="parent"
        android:background="@android:color/transparent"
        android:dividerHeight="0dp"
        android:listSelector="@drawable/list_color_selector" />

list_color_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Normal state. -->
    <item android:state_pressed="false" android:state_selected="false"
        android:alpha="0.4" android:drawable="@android:color/transparent"
         android:textColor="#FF0000" android:textStyle="bold" />
    <!-- pressed state. -->
    <item android:drawable="@android:color/transparent" android:state_pressed="true" />
    <!-- Selected state. -->
    <item android:alpha="0.8" android:drawable="@android:color/transparent"
        android:state_pressed="false" android:state_selected="true" android:textColor="#228B22" />

</selector>

Дизайн адаптера

val adapter = ArrayAdapter<String>(activity, R.layout.simple_listview, docTypes)
docTypesListView.adapter = adapter

simple_listview.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    xmlns:tools="http://schemas.android.com/tools"
    android:textSize="12dp"
    android:textColor="@drawable/list_item_text_selector"
    android:padding="10dp"
    android:gravity="left|center_vertical"
    android:background="@android:color/transparent"
    tools:text="Item_1" />

list_item_text_selector.xml

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/color_white" android:state_pressed="true" android:textStyle="bold" />
    <item android:color="@color/color_white" android:state_focused="true" android:textStyle="bold" />
    <item android:color="@color/color_white" />
</selector>

А мой ожидаемый дизайн похож на изображение ниже

Паспорт - это выбранный мной предмет

enter image description here

1 Ответ

0 голосов
/ 18 марта 2019

В вашем коде было много ошибок, поэтому я сделал это снова с нуля, чтобы помочь вам.Попробуйте мой приведенный ниже рабочий код для селектора с Recyclerview.

. Обратите внимание Каждое состояние в вашем селекторе белое, поэтому оно не было видно на экране

  1. На уровне вашего приложения build.gradle добавьте

    внедрение 'androidx.recyclerview: recyclerview: 1.0.0'

  2. В 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>

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...