2016-08-03 7 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); 
} 

私が午前問題は、私は、私はドラッグ&ドロップしたときに、私はリストに移動項目の位置を追跡する方法を知らないということです。私はカーソルの行の順序を変更することはできません。私はアダプタのデータソースがリストである例だけを見てきました。私はカーソルのデータをNoteオブジェクトのリストにコピーすることを考えました。ドラッグアンドドロップによる変更を反映するように並べ替えることができましたが、これはカーソルとカーソルローダーを使用することで得られるすべてを奪い取っているようです。また、カーソルローダーの読み込みが終了すると、元の順序ですべての結果を含む新しいカーソルが返され、それに応じてアダプターが移入されるため、新しいリストが失われた場合はそのオーダーに加えられた変更が行われます。

誰かがこれを行う方法を知っていますか?これについては、カーソルとローダーを使用して間違った方法で行っていますか?どんな助けでも大歓迎です。ありがとう!

答えて

1

これは、並べ替え順序を追跡するためにテーブルにsort_orderという名前の列を追加することで行いました。ドラッグアンドドロップすると、ItemTouchHelper.SimpleCallbackのonMoveメソッドでsort_orderが更新されます。あなたを解任するためにドラッグ&ドロップやスワイプを実装する方法

0

良いチュートリアルでは正確にあなたがそのカーソルが必要なのかどうhere

を見つけることができますか?特定の質問がある場合は、コメントを追加してください。私はこの機能で多くの作業をしました!

+0

このチュートリアルをリンクしていただきありがとうございます。私はカーソルを使用するのが最良の選択肢かどうかは分かりません。だから私はUdacityからコースを見るときにカーソルを拾い、カーソルローダーを使ってデータベースからデータを取得しました。私はカーソルがメモリにすべての結果をロードしないと思うので、それを行うには良い方法のように見えた後、ちょうどそれらを指してください(私が間違っている場合は私を修正してください)。これを行うより良い方法はありますか?上のチュートリアルでは、リストを投稿しましたは、アダプターのデータを取り込むためのデータソースとして使用されていますが、これは良い方法ですか? – SMcD

+0

ドラッグが発生した場合、どのようにエントリを切り替えるのか尋ねる必要がありますか?ポインタを介してdb内で直接実行しますか? – XxGoliathusxX

+0

これは私が分かりづらいところです。検索したカーソルの結果を操作できないので、どのように表示されるのかをよくわかりません。 – SMcD

関連する問題