【问题标题】:How to pass null argument in Android Databinding如何在 Android 数据绑定中传递空参数
【发布时间】:2018-11-13 11:58:47
【问题描述】:

为什么不能传递空值?如何解决?我找不到来自Document 的任何提示。

错误

****/ 数据绑定错误 ****msg:cannot find method onClick(java.lang.Object, java.lang.Object) in class kr.co.app.MyActivity.MyListener file:/Users/ jujaeho/projects/app/src/main/res/layout/activity_my.xml loc:24:71 - 24:106 ****\数据绑定错误****

代码

class MyActivity {
  interface MyListener {
    fun onClick(abc: ABC?, count: Int?)
  }
}

<layout>
  <data>
  <variable
    name="handler"
    type="kr.co.app.MyActivity.MyListener" />
  </data>
  <View
    ...
    android:onClick="@{() -> handler.onClick(null, null)}" />
</layout>

【问题讨论】:

  • 如果问题出在null 处理程序上,则应该是 NPE。但是根据发布的错误,问题与MyListener接口的错误方法签名有关

标签: android-databinding


【解决方案1】:

我今天刚遇到这个问题,我所做的基本上是将null参数转换为方法参数中期望的类型。在你的情况下,这应该是这样的:

<layout>
  <data>
  <import type="ABC" /> // just an illustration, specify the full package
  <variable
    name="handler"
    type="kr.co.app.MyActivity.MyListener" />
  </data>
  <View
    ...
    android:onClick="@{() -> handler.onClick((ABC) null, (int) null)}" />
</layout>

我不确定int 转换,但您可以尝试或使用Integer 包装类进行转换。

【讨论】:

  • int 转换不起作用,因为在 java 中,int 不能为 null,您必须使用 Integer。
【解决方案2】:

如果您打算传递 null 为什么不能为 onClick 方法分配默认值

class MyActivity {
  interface MyListener {
    fun onClick(abc: ABC?=null, count: Int?=null)
  }
}

如果你想传递null,你可以不传递任何东西

【讨论】:

  • 我认为java下的android数据绑定。所以处理默认值有些困难。虽然我们可以在方法上方输入@JvmOverloads,但这在界面中是不允许的。
  • 但我可以将 null 传递给接口内的参数。唯一的区别是它是一个单独的文件,没有内部活动
猜你喜欢
  • 2021-05-29
  • 2016-09-03
  • 2019-09-10
  • 2022-01-03
  • 1970-01-01
  • 2017-02-05
  • 1970-01-01
  • 2017-07-03
相关资源
最近更新 更多