将 BindingAdapter 与资源中的字符串数组结合使用

2024-01-12

我有一个almost简单的想法:我想使用数据绑定 API 和 BindingAdapter 为微调器生成一个适配器。这是我想要使用的 XML:

<Spinner
    android:id="@+id/country"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:value="@{address.country}"
    app:data="@{@array/countries}"
    app:keys="@{@array/iso_3166_2}"/>

这里的地址是一个简单的类,它有一个名为country它是一个字符串,将包含一个 ISO-3166-2 字符串。为了简单起见,值将是“DE”或“US”。

这是我的简化版arrays.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="iso_3166_2">
        <item>DE</item>
        <item>US</item>
    </string-array>

    <string-array name="countries">
        <item>@string/country_DE</item>
        <item>@string/country_US</item>
    </string-array>
</resources>

对于绑定,我编写了这个 BindingAdapter:

@BindingAdapter({"value", "data", "keys"})
public static void generateAdapter(Spinner spinner,
                                   String value,
                                   @ArrayRes int data,
                                   @ArrayRes int keys) {

}

当我尝试编译代码时出现此错误:

错误:任务“:app:compileDebugJavaWithJavac”执行失败。
java.lang.RuntimeException:发现数据绑定错误。
****/ 数据绑定错误 ****msg: 标识符必须具有 XML 文件中的用户定义类型。国家缺少它
文件:路径/to/the/spinner-above.xml
地点:95:31 - 95:39
****\ 数据绑定错误 ****

我的 xml 的第 95 行是这一行:app:value="@{address.country}"

你看到我做错了什么了吗?

顺便说一句,我不确定与数组资源相关的注释是否正确?我找不到将其限制为字符串数组的方法。


你可以通过参考得到它stringArray代替array。这是我使用 recyclerView 所做的事情,从资源中获取价值,它工作得很好,它也可能对你有帮助。

在字符串.xml中

<string-array name="myItems">
    <item>Item 1</item>
    <item>Item 2</item>
    <item>Item 3</item>
    <item>Item 4</item>
    <item>Item 5</item>
    <item>Item 6</item>
</string-array>

在布局.xml中

app:entries="@{@stringArray/fi}"

在你的情况下它可以是app:data="@{@stringArray/countries}" or app:keys="@{@stringArray/iso_3166_2}".

并在绑定方法中

@BindingAdapter({"entries"})
public static void entries(RecyclerView recyclerView, String[] array) {
    //get all values in array[] variable.
}

refer this https://stackoverflow.com/questions/33892253/androidentries-in-recyclerview了解更多。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 BindingAdapter 与资源中的字符串数组结合使用 的相关文章

随机推荐

  • 文本不会被 swift UI 包裹

    即使设置后 lineLimit nil 文本不会被换行 var body some View VStack alignment center Text SwiftUI is a modern way to declare user inte
  • 如何设置自定义单元格的角半径

    这是我的示例输出 其中下面的详细信息中有三个单元格 我为每个自定义单元格设置了角半径 但它无法正常工作 第一个单元格的角半径不起作用 第二个单元格的右上角和顶部左边正在工作 请说明为此做什么 void layoutSubviews supe
  • 临时变量的 C++ 生命周期 - 这安全吗?

    如果我正确理解临时对象生命周期的规则 那么这段代码应该是安全的 因为临时对象的生命周期stringstream in make string 持续到完整表达式结束 我不是 100 确信这里没有一个微妙的问题 但有人可以确认这种使用模式是否安
  • 子类化 UICollectionViewLayout 并分配给 UICollectionView

    我有一个 UICollectionViewController void viewDidLoad super viewDidLoad assign layout subclassed below self collectionView co
  • DebugDiag:如何手动注入 LeakTrack.dll

    我有一个来自生产的故障转储来识别内存泄漏 当我使用 DebugDiag v2 update 2 时 我收到一份报告 DebugDiag 没有检测到 w3wp DMP 中加载的 LeakTrack dll 因此没有泄漏 对此文件进行了分析 如
  • 错误:返回 void,return 关键字后面不能跟对象表达式

    private void QuestionAnswer Load object sender EventArgs e txtQuestion Enabled false txtQuestion BackColor Color White g
  • C 预处理器宏扩展

    我很难理解 C 预处理器在以下上下文中如何应用重写规则 我有以下宏 define A x A x define B x B x define X x x 这个想法是 每个宏都使用串联来创建一个新的表达式 它本身可以是一个宏 如果它是一个宏
  • Python3 硒问题

    我想通过以下方式抓取一些评论Web page https hotels ctrip com hotel 347422 html isFull F ctm ref hod sr lst dl n 1 8 当我尝试通过 Selenium 选择转
  • 如何单独使用 CSS 为 IE 和 Firefox 获得奇数/偶数着色?

    我的 Web 项目使用 php 但我需要单独使用 CSS 进行着色 因此我需要在 Firefox 和 Internet Explorer 中运行的代码 此代码已编写 但在 Internet Explorer 中不起作用 tbl css co
  • C 中指针的 const 用法

    我正在复习 C 有一个关于const与指针一起使用 我理解下面的代码 const char someArray 这是定义一个指向 char 类型和const修饰符意味着存储在someArray无法更改 然而 下面这句话是什么意思呢 char
  • 重复声明 TypeScript Getter Setter

    我正在尝试为 TypeScript 中的字段创建 getter 和 setter searchFilter string get searchFilter string return this searchFilter set search
  • 在 Windows 10 上安装 SQL Server 2017 开发人员版时出现“哎呀”错误

    我正在尝试使用 基本 安装类型安装 SQL Server 2017 Developer 版本 但它给出以下错误消息 Oops 无法安装 SQL Server setup exe 它尝试安装的构建版本是14 1710 3866 2 我已经尝试
  • 告诉 gradle 绕过依赖检查

    我在客户站点 位于防火墙后面 我正在尝试编译 但 gradle 一直在尝试检查我的依赖项 公司防火墙明确阻止 Maven 下载 因此我的构建失败 现在我之前已经编译过 所以依赖项确实已经存在于我的 user gradle 文件夹中 但已经超
  • silverlight 和 DataContractSurrogates 中都存在该类型

    我正在使用 silverlight 4 和 ria 服务 我收到一个错误说 类型 eLab Web SessionsHWFile 同时存在于 eLab Web dll 和 DataContractSurrogates c96b3601 cd
  • Excel-VBA 从文本文件导入模块(无需信任中心)

    我正在尝试创建一个自定义的子程序和函数库 在网络位置中另存为 txt 文件 我正在创建的工作簿的各个用户可以根据他们选择的用户表单函数导入它们 工作簿的用户只能通过用户表单使用工作簿 我不想要求他们修改其安全信任中心设置以使此导入库代码正常
  • servlet 的通配符路径?

    拥有一个 WebServlet urlPatterns myServlet 如果用户去myapp myServlet other 我仍然希望我的 servlet 能够捕获 也就是说 在 servlet 路径之后使用通配符 我怎么能这样做呢
  • 如何在 .NET 3.5 Web 应用程序中安装和使用 ASP.NET AJAX Control Toolkit?

    我如何让它与我的项目一起工作 http ajax asp net http ajax asp net http www codeplex com AjaxControlToolkit http www codeplex com AjaxCo
  • 尝试更改 github 页面的源时无法选择 master 分支/docs 文件夹

    感谢您花时间帮助我 我正在尝试发布我的 HTML 网站 但它不允许我使用 master 分支 文档文件夹 现在我在链接中使用我的用户名 如下所示 https djcinoj github io token sale 我知道它说 如果您想使用
  • Ipad 上的下拉菜单 css / js

    我正在开发一个带有简单且纯 CSS 下拉菜单的网站 该网站应该在台式机和 iPad 上使用 我的下拉菜单使用 hover触摸屏上出现伪类和问题 菜单展开良好 但永远不会折叠 关闭它的唯一方法是从同一下拉菜单中打开另一个子菜单 我的目标是当我
  • 将 BindingAdapter 与资源中的字符串数组结合使用

    我有一个almost简单的想法 我想使用数据绑定 API 和 BindingAdapter 为微调器生成一个适配器 这是我想要使用的 XML