当前位置: 首页 > 知识库问答 >
问题:

在RecycerView listview中选中多个复选框,但使用notifyDataSetChanged刷新列表时不能正常工作[重复]

海保臣
2023-03-14

  phonebooster.get(position).setSelected(isChecked);
            ArrayList<CacheDataModel> cacheDataModels=new ArrayList<>();
            cacheDataModels.addAll(phonebooster);
            phonebooster.clear();
            phonebooster.addAll(cacheDataModels);
            notifyDataSetChanged();

参见错误

 java.lang.IllegalStateException: Cannot call this method while RecyclerView is computing a layout or scrolling android.support.v7.widget.RecyclerView{fdff32c VFED..... ......ID 0,86-720,508 #7f080126 app:id/recyclerView}, adapter:com.example.cleanerandroid.adapter.AppAdapter@e7a21f5, layout:android.support.v7.widget.LinearLayoutManager@8d74b8a, context:com.example.cleanerandroid.activity.PhoneBooster@68f63c3
    at android.support.v7.widget.RecyclerView.assertNotInLayoutOrScroll(RecyclerView.java:2880)
    at android.support.v7.widget.RecyclerView$RecyclerViewDataObserver.onChanged(RecyclerView.java:5281)
    at android.support.v7.widget.RecyclerView$AdapterDataObservable.notifyChanged(RecyclerView.java:11997)
    at android.support.v7.widget.RecyclerView$Adapter.notifyDataSetChanged(RecyclerView.java:7070)
    at com.example.cleanerandroid.adapter.AppAdapter$1$1.run(AppAdapter.java:67)
    at android.app.Activity.runOnUiThread(Activity.java:6406)
    at com.example.cleanerandroid.adapter.AppAdapter$1.onCheckedChanged(AppAdapter.java:64)
    at android.widget.CompoundButton.setChecked(CompoundButton.java:182)
    at com.example.cleanerandroid.adapter.AppAdapter.onBindViewHolder(AppAdapter.java:75)
    at com.example.cleanerandroid.adapter.AppAdapter.onBindViewHolder(AppAdapter.java: 32)

我在Recyview中有复选框,每当我试图选中多个复选框时(请参阅下面的代码),它会给我错误(请参阅错误日志)。

共有1个答案

宇文梓
2023-03-14

试试这个

holder.mLinearParent.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (List.get(position).isSelected()) {
                List.get(position).setSelected(false);
            } else {
                List.get(position).setSelected(true);
            }
            notifyDataSetChanged();
        }
    });
 类似资料:
  • 我正在为listview的每个Iten使用listview实现复选框。我遇到的问题是,当我点击任何一个复选框时,当我滚动时,其他一些没有点击的复选框也会被随机点击。我在SO上通过了许多链接,但它并没有解决我的问题。 我的xml文件是

  • 我有几个复选框。基于JSON响应(通过ajax-requests加载数据),我使用.prop()函数设置和重置复选框的默认值。问题是,如果我手动改变它们,它们显然不会改变这种行为。我不能通过$('#checkbox:checked').val()传递复选框的值,控制台日志显示为'undefined'。这是因为.prop()函数吗?如何获取选中复选框的值? 如果你需要更多的信息,我很乐意提供。这里有

  • app.py reg_account.html 错误: 我想让的结果在中的复选框未选中时返回False,但我不明白为什么当我勾选了该复选框时,结果可以存储到数据库中?我试着调试了几次,但还是找不到一个可能的解决方案,所以有没有人可以帮忙?

  • 我试图创建一个表单,该表单顶部有一个复选框,当用户选中该复选框时,它会选择其他特定的复选框,但不是所有复选框。我很难通过反复试验或搜索找到答案。我唯一能找到的就是“全选”选项。不是我想要的。 理想情况下,当用户选中“管理包”旁边的复选框时,我想要“Chrome外观组”和“远程启动” 下面是代码和我在这方面的基本尝试,但它不起作用。提前谢谢。 超文本标记语言: Javascript 我不知道这个Ja

  • 问题内容: 堆栈上的菜鸟在这里溢出。我正在处理具有传输作业功能的网页。这使用户可以选中复选框以将作业发送回办公室,或者从所有可用列表中选择技术人员。我的问题是如何设置复选框,以便在页面加载时默认选中该复选框,并相应地禁用选择列表。这是我目前拥有的代码: 这是一个jsfiddle:http : //jsfiddle.net/hugmungus/LvHJw/5/ 当前,页面加载时已选中复选框,但该列表