RecyclerViewにリストをドラッグ移動する処理がうまくいきません。
ドラッグ移動はできるものの、画面を回転させたり、アプリを再起動したりすると元の状態に戻ってしまいます。
スワイプ処理はリストの削除となっており、こちらは正常に機能しております。
ソースコード
Java
1 public class MainActivity extends AppCompatActivity { 2 3 private RecyclerViewOpenHelper helper = null; 4 private List<Columns> myDataset = new ArrayList<>(); 5 private RecyclerView recyclerView; 6 private RecyclerViewAdapter mAdapter; 7 private RecyclerView.LayoutManager layoutManager; 8 private RecyclerView.ItemDecoration itemDecoration; 9 10 ~中略~ 11 12 //データベースから値を取得しデータセットにセットしています。 13 SQLiteDatabase db = helper.getWritableDatabase(); 14 try { 15 Cursor c = db.rawQuery("SELECT id, date, body FROM MEMO_TABLE", null); 16 boolean next = c.moveToFirst(); 17 18 while (next) { 19 Columns columns = new Columns(); 20 long id = Long.parseLong(c.getString(0)); 21 String date = c.getString(1); 22 String body = c.getString(2); 23 if(body.length() > 9) { 24 body = body.substring(0, 10) + "..."; 25 } 26 columns.setBody(body); 27 columns.setDate(date); 28 columns.setId(id); 29 30 myDataset.add(columns); 31 next = c.moveToNext(); 32 } 33 } finally { 34 db.close(); 35 } 36 37 ~中略~ 38 39 ItemTouchHelper itemTouchHelper = new ItemTouchHelper( 40 new SimpleCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN, 41 ItemTouchHelper.LEFT) { 42 43 @Override 44 public boolean onMove(@NonNull RecyclerView recyclerView, 45 @NonNull RecyclerView.ViewHolder viewHolder, 46 @NonNull RecyclerView.ViewHolder target) { 47 final int fromPos = viewHolder.getAdapterPosition(); 48 final int toPos = target.getAdapterPosition(); 49 myDataset.add(toPos, myDataset.remove(fromPos));//←これで保存されないのが謎です。 50 mAdapter.notifyItemMoved(fromPos, toPos); 51 return true; 52 } 53 54 @Override 55 public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { 56 final int fromPos = viewHolder.getAdapterPosition(); 57 long id = mAdapter.getItemId(fromPos); 58 SQLiteDatabase db = helper.getWritableDatabase(); 59 try { 60 db.delete("MEMO_TABLE", "id = ?", new String[]{String.valueOf(id)}); 61 } 62 finally { 63 db.close(); 64 } 65 myDataset.remove(fromPos); 66 mAdapter.notifyItemRemoved(fromPos); 67 } 68 } 69 ); 70 itemTouchHelper.attachToRecyclerView(recyclerView);
独自作成クラス
Java
1public class Columns { 2 3 private long id; 4 private String date; 5 private String body; 6 7 public long getId() { return id; } 8 public String getDate() { return date; } 9 public String getBody() { return body; } 10 public void setId(long id) { this.id = id; } 11 public void setDate(String date) { this.date = date; } 12 public void setBody(String body) { this.body = body; } 13}
このColumnsに問題があるのでしょうか...
回答1件
あなたの回答
tips
プレビュー