单击 CheckBox 时更新 RecyclerView 数据

Updating RecyclerView Data when CheckBox is clicked

我想在 RecyclerView.Adapter 上实现 CheckBox 但我不知道从哪里开始,我以前阅读过几篇与 CheckBox 相关的文章的参考资料RecyclerView 但是没有符合我问题的文章。

我收到了 API 的回复:

{
    "results": [
        {
            "isNameChecked": false,
            "name": "Data A",
            "data": [
                {
                    "isChecked": false,
                    "id": "A1",
                    "name": "Data 1"
                },
                {
                    "isChecked": true,
                    "id": "A2",
                    "name": "Data 2"
                }
            ]
        },
        {
            "isNameChecked": true,
            "name": "Data B",
            "data": [
                {
                    "isChecked": true,
                    "id": "B1",
                    "name": "Data 1"
                },
                {
                    "isChecked": true,
                    "id": "B2",
                    "name": "Data 2"
                },
                {
                    "isChecked": true,
                    "id": "B3",
                    "name": "Data 2"
                }
            ]
        }
    ]
}

如果CheckBoxAlltrue,所有现有的CheckBox将被设置为trueisNameCheckedisChecked) 并自动保存 idA1A2B2 等)如果 idtruedata 变成变量

否则,如果 All 框为 false,但 isNameChecked 设置为 true,则 [=结果中的 26=] 会将 isChecked 更新为 true

我不知道你是如何显示你的复选框的,但是你的适配器应该有存储在其中的所有项目的数据,并且该数据的一部分是项目是否被选中。我认为你有两种方法:

  • 使 All 复选框 set/unset 其所有 child 项目的选中状态(即遍历列表、地图或其他任何内容并更改所有值) 然后调用 notifyDataSetChanged()(或另一个 notify 方法)以便显示更新

  • 不要改变 children 的选中状态(所以如果你取消选中 All,其他人“记住”他们是否被选中)并且只决定是否他们应该 显示 根据 top-level 框

    检查

在您的适配器的 onBindViewHolder 方法中(它设置项目的显示,包括它是否显示为已选中),您可以找到 parent 复选框,如果已选中,您也可以显示选中的 child。否则显示其实际状态(数据中设置的真实值)。

这只是基本的想法,您必须弄清楚如何使其适应您实际正在做的事情以及如何在数据中表示该层次结构,但这是您可以采用的一种方式!