我在布局文件中使用数据绑定。以下是相关代码段:
<ImageButton
android:id="@+id/btn_cross"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_close_white"
app:onClick="@{(v) -> gameManager.dismissAndDestroyDialog()}"
app:tapEvent="@{(v) -> eventUtils.sendEvent(viewModel.state == State.IN_PROGRESS ? Source.GAME_LOADING : Source.GAME_LOADING_ERROR)}"/>
viewModel
:这是我的视图模型。tapEvent
:这是我用来绑定适配器的。Source
:枚举类State
:枚举类执行此操作时,出现以下异常:
e: error: cannot generate view binders java.util.ConcurrentModificationException
e:
e: at java.util.HashMap$HashIterator.nextNode(HashMap.java:1437)
e: at java.util.HashMap$ValueIterator.next(HashMap.java:1466)
e: at android.databinding.tool.expr.CallbackExprModel.seal(CallbackExprModel.java:63)
e: at android.databinding.tool.expr.LambdaExpr.setup(LambdaExpr.java:154)
e: at android.databinding.tool.Binding.resolveCallbackParams(Binding.java:93)
e: at android.databinding.tool.BindingTarget.resolveCallbackParams(BindingTarget.java:175)
e: at android.databinding.tool.LayoutBinder.<init>(LayoutBinder.java:237)
e: at android.databinding.tool.DataBinder.<init>(DataBinder.java:52)
e: at android.databinding.tool.CompilerChef.ensureDataBinder(CompilerChef.java:88)
e: at android.databinding.tool.CompilerChef.sealModels(CompilerChef.java:187)
e: at android.databinding.annotationprocessor.ProcessExpressions.writeResourceBundle(ProcessExpressions.java:184)
如果你需要更多的细节,请评论。我在不同的xml文件中也尝试过使用string param。没有什么对我有用。它是已知的虫子吗?如果是的话,有什么办法解决这个问题吗?
注意:eventutils类是用kotlin编写的,但我不认为这是一个问题。
编辑:viewmodel.state是状态枚举数据类型的可观察字段。
最佳答案
由于viewModel.state
是一个Observable
字段,请使用:
app:tapEvent="@{(v) -> eventUtils.sendEvent(viewModel.state.get() == State.IN_PROGRESS ? Source.GAME_LOADING : Source.GAME_LOADING_ERROR)}"
必须在lambda内部使用
get()
方法。