2017-07-31 6 views
2

の三項演算子を使用しているときの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ので

答えて

3

これはObservableフィールドを使用することです。

関連する問題