【问题标题】:Binding adapter with multiple arguments in Kotlin在 Kotlin 中使用多个参数绑定适配器
【发布时间】:2017-03-06 22:53:00
【问题描述】:

要为数据绑定适配器使用多个参数,Java 语法是

@BindingAdapter(value={"arg1", "arg2"}, requireAll = false)

但是这在 Kotlin 中无法编译:

Error:(13, 37) Unexpected tokens (use ';' to separate expressions on the same line)

Kotlin 中多个参数的正确语法是什么?

【问题讨论】:

    标签: android kotlin android-databinding


    【解决方案1】:

    应该是:

    @BindingAdapter(value=*arrayOf("arg1", "arg2"), requireAll = false)
    

    请参考官方注解docs for Java Annotations in Kotlin

    引用:

    对于其他具有数组类型的参数,需要显式使用arrayOf:

    // Java
    public @interface AnnWithArrayMethod {
        String[] names();
    }
    
    
    // Kotlin
    @AnnWithArrayMethod(names = arrayOf("abc", "foo", "bar")) class C
    

    编辑:感谢@Francesc

    【讨论】:

    • 谢谢。语法其实略有不同,@BindingAdapter(value= *arrayOf("arg1", "arg2"), requireAll = false)
    • 请注意 requireAll 参数必须明确设置,这就是我的问题
    【解决方案2】:

    或者你可以简单地这样做

    @BindingAdapter("arg1", "agr2", "agr3", "agr4", requireAll = false)
    

    正如Android Official Docs中指出的那样

    【讨论】:

      【解决方案3】:

      从 Kotlin 1.2 你可以做

      @BindingAdapter(value = ["arg1", "arg2"], requireAll = false)
      

      【讨论】:

      • 你能指定来源吗?
      【解决方案4】:

      你也可以这样做:

      @BindingAdapter(value= ["deckBackgroundAsFirstParameter", "typeAsSecondParameter"], requireAll = false) 
      fun loadBackgroundMethodNameForExample(imageViewForExample: ImageView, deckBackgroundAsFirstParameter: Int?, typeAsSecondParameter: Int?) {
         ...
      }
      

      其中 value 是您要使用的参数数组。

      【讨论】:

      • 虽然此代码可能会解决问题,including an explanation 关于如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请编辑您的答案以添加解释,并说明适用的限制和假设。
      猜你喜欢
      • 1970-01-01
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      • 2021-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多