の三項演算子を使用しているときのConcurrentModificationExceptionレイアウトファイルでデータバインディングを使用しています。 releventコードスニペットは以下の通りです:Androidデータバインディング:メソッドパラメータ
<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
:これはAdapterをバインドするために使用しています。
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 xmlファイルでこれを試してみました。何も私のために働いていません。それは既知のバグですか?もしそうなら、これには何か回避策がありますか?
注:eventUtilsクラスはKotlinで書かれていますが、ここではそれが問題ではありません。
編集:viewModel.stateは、State enumデータ型のObservableフィールドです。
app:tapEvent="@{(v) -> eventUtils.sendEvent(viewModel.state.get() == State.IN_PROGRESS ? Source.GAME_LOADING : Source.GAME_LOADING_ERROR)}"
get()
方法ラムダ内部に使用することが義務付けられている:viewModel.state
ので