Je me suis écrasé aujourd'hui alors je vais le laisser comme une note
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)
}
Cela provoquera un crash avec java.util.ConcurrentModificationException
lorsque cette méthode est appelée successivement.
C'est une histoire bien connue en Java, et j'y suis généralement accro lorsque je commence à peine à programmer. (J'ai déjà écrit du code qui provoque ce phénomène après 2 ans d'Android ...)
~~ Si la cause est ArrayList # remove, elle ne sera pas supprimée compte tenu de l'ordre de la liste. Il est bien résumé ci-dessous. ~~ (ajouté ci-dessous) 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)
}
Utilisez ʻiterator. Il semble que celui-ci a de meilleures performances, donc en gros vous pouvez utiliser ʻiterator
sauf que l'élément à supprimer est simple et appelé une seule fois.
C'est un article vide, mais je vais le laisser comme une note personnelle.
Je vous l'ai dit dans la section commentaires!
https://docs.oracle.com/javase/jp/8/docs/api/java/util/ArrayList.html
Il semble que l'itérateur vous permet simplement d'ajouter et de supprimer des éléments dans la liste dans l'instruction for, mais ArrayList lève une exception lorsque vous le faites.
Merci d'avoir enseigné!
Recommended Posts