Spinner привязки данных в RecyclerView - PullRequest
0 голосов
/ 07 октября 2019

У меня был успех с привязкой данных, за исключением Spinner, который я сейчас пытаюсь заставить его работать. Но я получаю сообщения об ошибках типа:

Не удается найти метод получения, который принимает тип параметра 'java.lang.String' - если я просто использую @ = {}

И, Не могу найти установщик для:

, который принимает тип параметра 'androidx.lifecycle.MutableLiveData' - если я просто использую @ {}

, я не уверен, чтоправильный подход. Я читал в некоторых сообщениях, что вам нужно создать собственный виджет, который имеет эти сеттер / геттер? Я думал, что объявления BindingAdapter и InverseBindingAdapter достаточно, но я получаю эти сообщения об ошибках компиляции.

Это мой код:

<androidx.appcompat.widget.AppCompatSpinner
            android:id="@+id/input_email_type"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:entries="@array/email_phone_types"
            android:spinnerMode="dialog"
            android:theme="@style/AppTheme.Light"
            app:newValue="@={email.emailType}"/>

android: записи в теге: ["Home",«Работа»] из файла arrays.xml.

@BindingAdapter(value = ["newValue", "newValueAttrChanged"], requireAll = false)
fun setNewValue(spinner: AppCompatSpinner, emailType: MutableLiveData<String>, changeListener: InverseBindingListener) {
    spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
        override fun onItemSelected(adapterView: AdapterView<*>, view: View, position: Int, id: Long) = changeListener.onChange()
        override fun onNothingSelected(adapterView: AdapterView<*>) = changeListener.onChange()
    }

    val adapter: ArrayAdapter<String> = spinner.adapter as ArrayAdapter<String>
    spinner.setSelection(adapter.getPosition(emailType.value))
}

@InverseBindingAdapter(attribute = "newValue", event = "newValueAttrChanged")
fun getNewValue(spinner: AppCompatSpinner): String = spinner.selectedItem as String

fun add() {
    emails!!.add(Email())
    notifyItemInserted(emails!!.size - 1)
}

Код находится в моем пользовательском классе RecyclerView.Adapter, а электронная почта является классом электронной почты. в то время как emailType является свойством Email типа MutableLiveData

Спиннер находится в каждой строке в RecyclerView. и я назначил @ = {email.emailType} для двухсторонней привязки данных.

Мысли?

...