2016-08-03 70 views
3

我一直在嘗試使用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對象列表中,以便我可以重新排列它們以反映通過拖放操作所做的更改,但這似乎是通過使用遊標和光標加載程序來挫敗您獲得的所有內容。另外,當遊標加載器完成加載時,它將返回一個新的遊標,並重新顯示原始順序中的所有結果,並相應地填充適配器,因此,如果我的新列表將會丟失,那麼對該命令所做的任何更改都將會消失。

有沒有人知道如何做到這一點,或者我是否完全用錯誤的方式使用遊標和加載程序?任何幫助將非常感激。謝謝!

回答

1

我已經通過在表中添加一個名爲sort_order的列來跟蹤排序順序。拖放時,在ItemTouchHelper.SimpleCallback的onMove方法中更新sort_order。

0

一個很好的教程如何實現拖放和滑動將其關閉,你可以找到here

究竟你需要一個光標是什麼?如果您有任何具體問題,請添加評論。我用這個功能做了很多工作!

+0

感謝您鏈接該教程,它看起來很有幫助。我不確定是否使用遊標是最好的選擇。所以當我從Udacity的課程中看到Cursors時,他們使用遊標加載器從數據庫中檢索數據。經過一段時間的閱讀,似乎是一種很好的方法,因爲我相信遊標不會將所有結果加載到內存中,只需指向它們(如果我錯了,請糾正我)。有一個更好的方法嗎?在上面的教程中,您發佈了一個列表被用作填充適配器的數據源,這是一個更好的方法來解決它嗎? – SMcD

+0

我需要問,如果發生拖動,請如何切換條目?你是否通過指針直接在db中執行它? – XxGoliathusxX

+0

是的,這就是我在這一刻掙扎着,我不知道我將如何改變條目的順序,因爲一旦檢索到它就無法操縱遊標結果, – SMcD