0

グレッティングス、誰かがこれを手伝ってくれませんか。オブザーバーからの要素を追加するための補助リストを既に実装していますが、それでも問題は解決せずConcurrentModificationException、addAll 行で発生しています。

フラグメントクラス内にあり、プロジェクトが持つマネージャーから来たオブザーバーがあり、配列リストに表示される要素のリストを提供します

manager.getMutableList()
            .observe(viewLifecycleOwner, Observer { mutableList ->
                val auxList = mutableListOf<CustomClass>().apply {
                    addAll(mutableList)
                }
                if (auxList.isNotEmpty()) {
                    ...
                } else {
                    ...
                }

                (recyclerView.adapter as RecyclerAdapter).run {
                    items = auxList
                    notifyDataSetChanged()
                    ...
                }
            })

これはスタックトレースです

java.util.ArrayList$SubList.size (ArrayList.java:1057)
java.util.ArrayList.addAll (ArrayList.java:588)
com.project.project.Fragment$setObservers$6.onChanged (Fragment.java:330)
com.project.project.Fragment$setObservers$6.onChanged (Fragment.java:74)
androidx.lifecycle.LiveData.considerNotify (LiveData.java:131)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1101)

どんな助けでも大歓迎です!

4

1 に答える 1

0

問題はmutableList、メイン スレッド以外のスレッドから変更することです。これらの例外を回避する最善の方法は、リストを不変にすることです(つまり、 のList代わりにMutableList)。

それを変更したいすべてのコードは、独自のコピーを作成する必要があります。

val copy = list.toMutableList()
copy.add(...)
于 2020-07-09T06:58:57.643 に答える