从RecyclerView中删除项目并将其插入其他位置

时间:2019-06-15 07:00:24

标签: android android-recyclerview

我想使用RecyclerViewonBindViewHolder内部的position中删除项目。此position参数是屏幕上可见视图的位置,而不是ArrayList中项目的实际位置。如果我想从列表中的该位置删除此项目并将其移至屏幕上实际上不可见的ArrayList的另一部分(onBindViewHolder位置对我来说是未知的),我是否可以用{ {1}}或正确执行此操作的唯一方法是致电notifyItemSetChanged()

这有点复杂,notifyDataSetChanged())具有多个标题和项目变体(我在Adapter中使用5个ViewHolders)。该适配器的主要目的是更改项目的位置,每次都进行复制。其类似于联系人列表部分。

我的问题的简单表示:

enter image description here

4 个答案:

答案 0 :(得分:0)

您可以尝试

list.removeItemAt(position)
list.addItemAdd(position)
adapter.notifyDataSetChanged()

希望它对您有用。

答案 1 :(得分:0)

正确的方法是

list.remove(position);
notifyItemRemoved(position);
list.add(newposition,item);
notifyItemInserted(newposition);  

OnBindViewHolder的位置就是列表中项目的位置,这就是填充视图的方式

答案 2 :(得分:0)

这对我有用

“callback: @escaping (Result<User, Error>) -> ()

答案 3 :(得分:0)

尽管先前的答案可行,但我认为您要用于通知适配器的方法如下:

notifyItemMoved(int fromPosition, int toPosition)
  

通知任何注册观察员该物品已反映   来自fromPosition的位置已移至toPosition。

这样,您在获得动画/过渡效果时避免使用两种方法。