В моем макете XML есть счетчик, который устанавливает атрибут с именем sourceData
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<import type="com.lionosur.dailyexpenses.database.Entity.Source"/>
<import type="java.util.List"/>
<import type="android.arch.lifecycle.LiveData"/>
<variable name="createExpenseViewModel" type="com.lionosur.dailyexpenses.viewModels.MainViewModel"/>
</data>
<Spinner
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/expense_category"
app:sourceData="@{createExpenseViewModel.getAllSourceItems(1)}"
app:layout_constraintStart_toStartOf="@+id/textView"
android:layout_marginTop="20dp"
app:layout_constraintTop_toBottomOf="@+id/textView" app:layout_constraintWidth_percent="0.7"
/>
метод createExpenseViewModel.getAllSourceItems (1) возвращает переменную типа LiveData > , я написал адаптер привязки для привязки списка, возвращенного этим методом, к счетчику
class AddExpenseAdapter {
companion object {
@JvmStatic
@BindingAdapter("app:sourceData")
fun setSourceData(spinner: Spinner, sourceList: List<Source>?) {
val categoryItems = ArrayList<String>()
if (sourceList != null) {
categoryItems.addAll(sourceList.map { it.sourceName })
}
val spinnerAdapter =
ArrayAdapter<String>(spinner.context, android.R.layout.simple_spinner_dropdown_item, categoryItems)
spinner.adapter = spinnerAdapter
}
}
}
Я реализовал привязку в своей деятельности следующим образом
lateinit var binding: ActivityCreateExpenseBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true)
binding = DataBindingUtil.setContentView(this, R.layout.activity_create_expense)
val mainViewModel = DaggerExpenseComponent.builder()
.setContext(this)
.build()
.getExpenseViewModel()
binding.setLifecycleOwner(this)
binding.createExpenseViewModel = mainViewModel
}
но мой метод забавный setSourceData (spinner: Spinner, sourceList: List?) sourceList всегда получает нулевое значение, я просто запутался, почему liveata возвращает нулевое значение в адаптер привязки, если я наблюдаю ту же модель представления метод с в действии, то я могу видеть элементы, но с помощью привязки данных я могу получить только нулевые значения для моего адаптера привязки