繁体   English   中英

Android Databinding:ConcurrentModificationException而在方法参数中使用三元运算符

[英]Android Databinding : ConcurrentModificationException while using ternary operator in method parameter

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

        <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 :这是此布局的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)

如果您需要更多详细信息,请发表评论。 我也用String param在不同的xml文件中尝试了这个。 什么都没有为我工作。 这是一个已知的错误吗? 如果是这样,是否有任何解决方法?

注意:eventUtils类是用Kotlin编写的,但在这里我认为这不是问题。

编辑:viewModel.state是State枚举数据类型的Observable字段。

由于viewModel.state是一个Observable字段,请使用以下命令:

app:tapEvent="@{(v) -> eventUtils.sendEvent(viewModel.state.get() == State.IN_PROGRESS ? Source.GAME_LOADING : Source.GAME_LOADING_ERROR)}"

在lambda内部必须使用get()方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM