Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何更新RecyclerView中项目的位置?_Java_Android - Fatal编程技术网

Java 如何更新RecyclerView中项目的位置?

Java 如何更新RecyclerView中项目的位置?,java,android,Java,Android,我正在尝试向待办事项列表中添加一个功能,该功能会导致“选中”项位于列表的底部。我正在使用ArrayList保存使用RecyclerView组织的项目,因此我知道关键是更新位置,但我不确定如何做到这一点 我搞不懂你怎么把所有的东西都往上移一步,然后把选中的项目放在最后一个位置,这样它就在列表的底部了 这就是我如何进行复选框和取消复选框的操作: taskCheckBox.setOnClickListener(new View.OnClickListener() {

我正在尝试向待办事项列表中添加一个功能,该功能会导致“选中”项位于列表的底部。我正在使用
ArrayList
保存使用
RecyclerView
组织的项目,因此我知道关键是更新位置,但我不确定如何做到这一点

我搞不懂你怎么把所有的东西都往上移一步,然后把选中的项目放在最后一个位置,这样它就在列表的底部了

这就是我如何进行复选框和取消复选框的操作:

taskCheckBox.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v) {
                if (holder.taskCheckBox.isChecked())
                {
                    bucketItem.setSelected(false);
                    holder.taskCheckBox.setChecked(false);
                }
                else
                {
                    bucketItem.setSelected(true);
                    holder.taskCheckBox.setChecked(true);
                }
            }
        });

我不知道我会添加什么来更新职位,我仍然对我如何始终知道“底部”是什么感到困惑,因为列表中没有固定数量的项目。

Android团队添加了对此类操作的支持。查看DiffUtils:

简而言之,您只需要提供一个适当的数据集,并让库找出发生了什么变化

如果仍要手动执行此操作,则需要执行以下操作:

  • 单击后,更新基础模型,使其具有正确的选定状态

  • 将该项目重新排序到列表中的适当位置。(列出。删除(位置),然后列出。添加(项目)

  • 在适配器上调用notifyDataSetChanged()。(或者更好地说,是从,改为)


  • 请查看此a-list-to-end]。这说明了如何将项移动到ArrayList的末尾。这只是对该列表执行的“删除”和“添加”操作。可能您必须通知视图数据已被删除changed@ZeusNet谢谢你的链接!这对我很有帮助。你能把你说的安卓系统的东西扩展一下吗?这是我有史以来第一个安卓系统项目因此,我仍在学习术语。问题是您正在更改视图的数据,因此视图也应该得到更新。为此,您的RecycleView的适配器有一些方法可以通知您。例如,有一个方法。但该方法也可能是一个很好的选择