Android Kotlin: Spinner onItemSelectedListener не работает должным образом - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь добавить настраиваемый список в счетчик и хочу сделать что-то определенное c при выборе элемента из него. кажется, что мои адаптеры привязки работают нормально. Я могу видеть элемент списка, когда нажимаю на счетчик. Однако присвоение onItemSelectedListener ему, похоже, не работает. Любые идеи? Вот мой код

xml file

                <com.google.android.material.textfield.TextInputLayout
                    android:id="@+id/category_layout"
                    android:layout_width="@dimen/adjustable_size"
                    android:layout_height="wrap_content"
                    android:background="@color/colorPrimary"
                    app:layout_constraintStart_toStartOf="@id/guide_line_start"
                    app:layout_constraintEnd_toEndOf="@id/guide_line_end"
                    app:layout_constraintTop_toBottomOf="@+id/category_header">

                    <Spinner
                        android:id="@+id/category_spinner"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        app:onCategorySelected="@{viewModel.spinnerListener}"
                        app:categorySpinnerItems="@{viewModel.stringList}" />
                </com.google.android.material.textfield.TextInputLayout>

viewModel class

    val spinnerListener: AdapterView.OnItemSelectedListener = object: AdapterView.OnItemSelectedListener {
        override fun onNothingSelected(parent: AdapterView<*>?) {

        }

        override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
            Log.d("ABID", "item selected") //does not execute
            parent?.setSelection(position)
        }

    }

bindingAdapters

        @BindingAdapter("categorySpinnerItems")
        @JvmStatic
        fun Spinner.setEntries(categories: List<String>) {
            adapter = ArrayAdapter<String>(context, R.layout.item_category_spinner_text_view, categories)
            Log.d("ABID", "list added on  binding adapter!") //this line executes!
        }

        @BindingAdapter("onCategorySelected")
        @JvmStatic
        fun Spinner.onCategoryItemSelected(listener: AdapterView.OnItemSelectedListener) {
            Log.d("ABID", "item selection binding adapter attached!") //this line executes!
            onItemSelectedListener = listener
        }
...