android - 如何使用 ItemTouchHelper 和光标实现拖放

标签 android android-recyclerview itemtouchhelper

我一直在尝试使用 ItemTouchHelper 将拖放功能实现到我的笔记应用程序中,但是我正在努力弄清楚如何让它与光标一起工作。我目前正在使用游标加载器和内容提供程序从数据库中检索存储的笔记数据,适配器从返回的游标接收数据,如图所示。

public void onBindViewHolder(RecyclerViewAdapter.MyViewHolder holder, int position) {
    mCursor.moveToPosition(position);
    String title = mCursor.getString(mCursor.getColumnIndex(NotesContract.COL_TITLE));
    String body = mCursor.getString(mCursor.getColumnIndex(NotesContract.COL_BODY));
    holder.titleText.setText(title);
    holder.bodyText.setText(body);
}

我遇到的问题是,当我拖放它们时,我不知道如何跟踪列表中移动项目的位置。我无法更改游标中行的顺序。我只看到适配器的数据源是列表的示例。我考虑过将我的光标数据复制到 Note 对象列表中,以便我可以重新排列它们以反射(reflect)通过拖放所做的更改,但这似乎使您通过使用光标和光标加载器获得的所有 yield 都落空了。此外,当游标加载器完成加载时,它将再次返回一个包含所有结果的新游标,并相应地填充适配器,因此如果我的新列表丢失,对顺序所做的任何更改都会丢失。

有谁知道该怎么做,还是我使用游标和加载器的方式完全错误?任何帮助将非常感激。谢谢!

最佳答案

我通过在表中添加一个名为 sort_order 的列来跟踪排序顺序来完成此操作。当您拖放时,您会在 ItemTouchHelper.SimpleCallback 的 onMove 方法中更新 sort_order。

关于android - 如何使用 ItemTouchHelper 和光标实现拖放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38751330/

相关文章:

xml - 如何在我的自定义形状 xml 中添加图像

android - 删除动态创建的 EditText

android - 将 GridLayoutManager 与 RecyclerView 一起使用时出现 Admob 问题

ListView 中的Android textview高度和复选框

android - 如何查看不同语言的 google play 商店列表

Android - 如何在滚动时停止在 Recyclerview 中重新加载图像

java - 滚动时防止 RecyclerView 显示以前的内容

android - 从 RecyclerView 中分离 ItemTouchHelper

android - RecyclerView 为列表中的每个项目提供不同的 ItemTouchHelper

android - notifyItemMoved() 在迁移到 ListAdapter Android 时不起作用