Tag: stack overflow

在使用Android Databinding和Kotlin的自定义BindingAdapter中使用lambda

我正在尝试使用Kotlin为Android Databinding绑定一个lambda处理程序。 只要我的ViewModel处理程序显式地返回Void就行了。 但是,如果它返回Kotlin单位,我得到一个error: cannot generate view binders java.lang.StackOverflowError 。 一切似乎都正确地钩上了所有其他自定义绑定工作(convertBooleanToViewVisibility,toTestString,甚至customOnClick只要我打电话onClickVoid [见下面的例子])。 问题是当我试图调用lambda返回单元在我的应用程序:customOnClick而不是返回Void。 在下面的例子中,它是调用mainViewModel.onClick()而不是mainViewModel.onClickVoid() 。 必须有一种方法可以使android:onClick能够调用Unit版本。 但是,如果我使用相同的语法调用onClick的customOnClick,我得到这个错误: :app:kaptGenerateStubsDebugKotlin Using kotlin incremental compilation :app:kaptDebugKotlin e: error: cannot generate view binders java.lang.StackOverflowError e: e: at android.databinding.tool.writer.Scope.access$getCurrentScope$cp(LayoutBinderWriter.kt:49) e: at android.databinding.tool.writer.Scope$Companion.getCurrentScope(LayoutBinderWriter.kt:58) e: at android.databinding.tool.writer.LayoutBinderWriterKt.scopedName(LayoutBinderWriter.kt:196) e: at android.databinding.tool.expr.Expr.toCode(Expr.java:776) e: at android.databinding.tool.writer.LayoutBinderWriterKt$callbackLocalName$2.invoke(LayoutBinderWriter.kt:203) e: at android.databinding.tool.writer.LayoutBinderWriterKt$callbackLocalName$2.invoke(LayoutBinderWriter.kt) e: at android.databinding.tool.ext.LazyExt.getValue(ext.kt:27) e: at android.databinding.tool.writer.LayoutBinderWriterKt.getCallbackLocalName(LayoutBinderWriter.kt) […]