【问题标题】:How do I set the item layout for a Spinner with DataBinding?如何使用 DataBinding 为 Spinner 设置项目布局?
【发布时间】:2020-06-30 21:44:28
【问题描述】:

当尝试在 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 以使用我提供的布局;它默认为默认的ArrayAdapter,它只有一个TextView 设置为读取name 值(tools:listitem 似乎只在Android Studio 的设计器中使用)。

即使我尝试使用

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

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

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

【问题讨论】:

    标签: android android-layout android-spinner android-databinding


    【解决方案1】:

    我认为您可以使用 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}" />
    

    参考资料:

    希望对你有帮助:)

    【讨论】:

    • 我猜他们需要为微调器项目设置自定义行布局,而不是设置微调器的整个列表
    • 看起来这允许我在 xml 属性中进行设置,否则我只能在 Java 中设置。因为我似乎找不到允许我设置项目布局的 Java 函数,所以这让我回到了开始的地方。除此之外,这个答案似乎只是向我展示了一种不同的方式来做我已经成功做的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    相关资源
    最近更新 更多