我在布局文件中使用数据绑定。以下是相关代码段:

        <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()方法。

10-07 19:04
查看更多