У меня есть перечислимый класс Product, в котором перечислены перечисления, а также метод объекта-компаньона для возврата списка.
@Parcelize
enum class Product: Parcelable {
FOO,
BAR,
BAZ;
companion object {
fun list(): ArrayList<Product> {
return arrayListOf(FOO, BAR, BAZ)
}
}
}
В макете. xml У меня есть счетчик с импортом заявление. Я связываю функцию списка с записями счетчика.
<layout>
<data>
<import type="data.Product" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout>
<Spinner
android:id="@+id/spinner"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:entries="@{Product.Companion.list()}" />
Проблема : Невозможно собрать или скомпилировать приложение.
Не удалось найти accessor data.Product.Companion.comboList
Edit 1
С помощью этой статьи я стал на шаг ближе.
Изменен импорт в переменную и включен объект Companion
<data>
<variable name="productStatic" type="data.Product.Companion" />
</data>
и spinner как
<Spinner
android:id="@+id/spinner"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:entries="@{ProductStatic.list}" />
FormFragment как (Мне не ясно, как с этим обращаться здесь?), список счетчиков по-прежнему пуст.
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val binding = UserFormBinding.inflate(inflater, container, false).apply {
productStatic.list = Product.list()
}
return binding.root
}
Редактировать 2
Из комментариев я понял, что делал это неправильно, он должен были через адаптер из kotlin кода. Вот мое обновление, но вопрос в том, как его автоматически выбрать?
Макет xml
<data>
<variable name="products" type="android.widget.ArrayAdapter" />
<variable name="user" type="data.User" />
</data>
...
<Spinner
android:id="@+id/spinner"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:adapter="@{products}" />
FormFragment.
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val binding = UserFormBinding.inflate(inflater, container, false).apply {
user = this@UserForm.user
products = ArrayAdapter(activity!!, android.R.layout.simple_spinner_item, Product.list())
}
return binding.root
}