Данные связывают счетчик с функцией в сопутствующем объекте перечисления - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть перечислимый класс 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...