Ich bin heute abgestürzt, also werde ich es als Notiz hinterlassen
fun releaseGroupItem(uri: Uri){
var i = 0
selectImageList.forEach {
if (it.imageUri == uri){
selectImageList.removeAt(i)
}
i++
}
val adapter = SelectImageFragmentAdapter(supportFragmentManager, selectImageList)
select_image_pager.adapter = adapter
indicator_default.setViewPager(select_image_pager)
}
Dies führt zu einem Absturz mit "java.util.ConcurrentModificationException", wenn diese Methode nacheinander aufgerufen wird.
Dies ist eine bekannte Geschichte in Java, und ich bin normalerweise süchtig danach, wenn ich gerade mit dem Programmieren beginne. (Ich habe bereits Code geschrieben, der dieses Phänomen nach 2 Jahren Android verursacht ...)
~~ Wenn die Ursache ArrayList # remove ist, wird sie unter Berücksichtigung der Reihenfolge der Liste nicht gelöscht. Es ist unten schön zusammengefasst. ~~ (unten hinzugefügt) http://programming-study.com/technology/java-list-remove/
fun releaseGroupItem(uri: Uri){
val iterator = selectImageList.iterator()
while (iterator.hasNext()){
val removeUri = iterator.next()
if (removeUri.imageUri == uri) {
iterator.remove()
}
}
val adapter = SelectImageFragmentAdapter(supportFragmentManager, selectImageList)
select_image_pager.adapter = adapter
indicator_default.setViewPager(select_image_pager)
}
Verwenden Sie "Iterator". Es scheint, dass dieser eine bessere Leistung hat, daher ist es möglicherweise besser, "Iterator" zu verwenden, außer dass das zu löschende Element einfach ist und nur einmal aufgerufen wird.
Es ist ein leerer Artikel, aber ich werde ihn als persönliche Notiz hinterlassen.
Ich habe es dir im Kommentarbereich gesagt!
https://docs.oracle.com/javase/jp/8/docs/api/java/util/ArrayList.html
Es scheint, dass Sie mit dem Iterator einfach Elemente in der Liste in der for-Anweisung hinzufügen und entfernen können, aber ArrayList löst dabei eine Ausnahme aus.
Danke für den Unterricht!
Recommended Posts