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

时间:2017-07-31 12:54:37

标签: java android data-binding

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

        <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文件中。没有什么对我有用。这是一个已知的bug吗?如果是这样,有没有解决这个问题?

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

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

1 个答案:

答案 0 :(得分:3)

由于Observableapp:tapEvent="@{(v) -> eventUtils.sendEvent(viewModel.state.get() == State.IN_PROGRESS ? Source.GAME_LOADING : Source.GAME_LOADING_ERROR)}" 字段,请使用此字段:

get()

必须在lambda中使用<div className="page-form__block"> <p> Is there any PPE associated with this work? </p> <Field name="ppe" component={props => <PPE {...props} /> } /> </div> 方法。