首页 > 解决方案 > 如何使用 DataBinding 为 Spinner 设置项目布局?

问题描述

当尝试在 Spinner 上使用 DataBinding 时,我可以通过设置 xml 来让它显示和选择项目:

<layout xmlns="blahblahblah">
    <data>
        <variable
            name="myItemList"
            type="java.util.List&lt;myItem>" />
    </data>
</layout>
<LinearLayout>
    <Spinner
        android:entries="@{myItemList}"
        tools:listitem="@layout/my_spinner_items_layout" />
</LinearLayout>

然后我有my_spinner_items_layout多个 DataBound 视图,但我似乎找不到任何方法来设置 Spinner 以使用我提供的布局;它默认为 default ArrayAdapter,它只有一个TextView集合来读取一个name值(tools:listitem似乎只在 Android Studio 的设计器中使用)。

即使我尝试使用

myViewBinding.mySpinner.setAdapter(new MySpinnerAdapter(this, R.layout.my_spinner_items_layout, myItemList));

正如我在没有 DataBinding 的情况下所做的那样,我的自定义适配器中的任何函数都不会被调用(显然,除了构造函数)。

我应该如何使用 DataBinding 为 Spinner 指定自定义布局?

标签: androidandroid-layoutandroid-spinnerandroid-databinding

解决方案


我认为您可以使用 bindinAdapters 并通过数据绑定提供强大的功能,例如:

    @BindingAdapter("entries")
    fun Spinner.setEntries(entries: List<Any>?) {
        setSpinnerEntries(entries)
    }

它可以是一个 Util 类(SpinnerUtils)

<Spinner
android:id="@+id/item_quantity_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:entries="@{myItemList}" />

参考:

我希望这能帮到您 :)


推荐阅读