首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RecyclerView中的并发修改

RecyclerView中的并发修改
EN

Stack Overflow用户
提问于 2018-08-31 17:35:18
回答 1查看 632关注 0票数 1

我在从RecyclerView中的List中删除项目时遇到问题。它包含选中项目的列表。我想取消选中列表中的一项。

因此,方法removeGroupItem()从选中项的列表中删除项。这就是它:

代码语言:javascript
复制
private void removeGroupItem(String groupId) {
    for (String group : pickedGroups) {
        if (group.equals(groupId))
            pickedGroups.remove(group);
    }
}

如果我非常快的点击了2-3次,它就会崩溃。下面是stacktrace:

代码语言:javascript
复制
java.util.ConcurrentModificationException
        at java.util.ArrayList$Itr.next(ArrayList.java:860)
        at com.camness.vidimguploadjun2016.trips.group_adapter.GroupsAdapter.removeGroupItem(GroupsAdapter.java:76)
        at com.camness.vidimguploadjun2016.trips.group_adapter.GroupsAdapter.access$300(GroupsAdapter.java:16)
        at com.camness.vidimguploadjun2016.trips.group_adapter.GroupsAdapter$GroupViewHolder.lambda$new$0$GroupsAdapter$GroupViewHolder(GroupsAdapter.java:65)
        at com.camness.vidimguploadjun2016.trips.group_adapter.GroupsAdapter$GroupViewHolder$$Lambda$0.onClick(Unknown Source:2)
        at android.view.View.performClick(View.java:6303)
        at android.widget.CompoundButton.performClick(CompoundButton.java:134)
        at android.view.View$PerformClick.run(View.java:24828)
        at android.os.Handler.handleCallback(Handler.java:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6798)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

提前感谢大家的帮助。

EN

回答 1

Stack Overflow用户

发布于 2018-08-31 18:15:30

首先,改变工作逻辑。例如,您可以在删除后中断

代码语言:javascript
复制
    for (String group : pickedGroups) {
        if (group.equals(groupId)) {
            pickedGroups.remove(group);
            break;
        }
    }

但您还必须同步可以访问此数组的线程。例如

代码语言:javascript
复制
    synchronized(pickedGroups) {
       for (String group : pickedGroups) {
           if (group.equals(groupId)) {
               pickedGroups.remove(group);
               break;
           }
       }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52112537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档