如何使用ItemTouchHelper和游标实现拖放

时间:2016-08-03 18:40:41

标签: 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);
}

我遇到的问题是,当我拖放它时,我不知道如何跟踪列表中移动项目的位置。我无法更改光标中行的顺序。我只看到了适配器的数据源是List的示例。我曾考虑将我的光标数据复制到Note对象列表中,这样我就可以重新排列它们以反映拖放所做的更改,但这似乎会通过使用游标和游标加载器来挫败你所获得的一切。此外,当游标加载器完成加载时,它将返回一个新游标,其中所有结果再次按原始顺序填充,并相应地填充适配器,因此如果我的新列表将丢失,则对订单进行任何更改。

有谁知道如何做到这一点,还是我使用游标和加载器完全错误地使用游标?任何帮助将非常感激。谢谢!

2 个答案:

答案 0 :(得分:1)

我通过在表中添加名为sort_order的列来跟踪排序顺序。拖放时,在ItemTouchHelper.SimpleCallback中的onMove方法中更新sort_order。

答案 1 :(得分:0)

一个很好的教程如何实现拖放和滑动以解雇你可以找到here

你到底需要什么?如果您有任何具体问题,请添加评论。我用这个功能做了很多工作!