android - 如何使用 DataBinding 为 Spinner 设置项目布局?
问题描述
当尝试在 Spinner 上使用 DataBinding 时,我可以通过设置 xml 来让它显示和选择项目:
<layout xmlns="blahblahblah">
<data>
<variable
name="myItemList"
type="java.util.List<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 指定自定义布局?
解决方案
我认为您可以使用 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}" />
参考:
我希望这能帮到您 :)
推荐阅读
- r - PowerBI R 脚本运行时错误,从 rlang 0.3.0 开始,不推荐使用 rlang 命名空间为 UQ() 加前缀
- java - 在关闭期间,骆驼报告没有可用的消费者,但后来它关闭了同一个消费者,
- javascript - 除带有 Javascript/jQuery 的按钮外,整个表格行均可点击
- asp.net-mvc - 带有 Asp.Net MVC 的自动版本
- arrays - 如何检查数组中的所有值是否相同?
- go - 关闭和测距 go 通道
- node.js - COR 阻止 PUT 方法的 AWS Preflight 响应
- c++ - 为什么 __nss_database_lookup 在我的数字 C++ 程序中占用大部分时间
- python - 在 codejam 中出现运行时错误,但在其他地方工作正常
- javascript - 如何在 TypeScript 中定义接口以正确传递道具?