質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Realm

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

0回答

586閲覧

Realmを使った際のItemTouchHelper.SimpleCallbackのonMove()の実装方法を教えてください

NaoQ

総合スコア6

Realm

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

1クリップ

投稿2020/09/25 14:30

前提・実現したいこと

kotlinでAndroidのtodoアプリを作っています。リスト項目の並び替えをItemTouchHelper.SimpleCallbackを使って実装したいのですが、上下の並び替えが上手く出来ません(onMove()のオーバーライド)。

ちなみにonSwiped()は動いています。

発生している問題・エラーメッセージ

add()を使ってもdeprecatedの実行エラーが出てしまいます。RealmResultのreferenceを見る限りその他にRealmResultの特定の位置に要素を挿入するようなメソッドが見つからず困っています。

どなたかよろしくお願いいたします。

kotlin

1package com.example.simpletodo 2 3import androidx.appcompat.app.AppCompatActivity 4import android.os.Bundle 5import android.widget.CheckBox 6import androidx.recyclerview.widget.ItemTouchHelper 7import androidx.recyclerview.widget.LinearLayoutManager 8import androidx.recyclerview.widget.RecyclerView 9import io.realm.Realm 10import io.realm.kotlin.createObject 11import io.realm.kotlin.where 12import kotlinx.android.synthetic.main.activity_main.* 13import kotlinx.android.synthetic.main.todo_list_row.* 14 15class MainActivity : AppCompatActivity() { 16 private lateinit var realm: Realm 17 18 override fun onCreate(savedInstanceState: Bundle?) { 19 super.onCreate(savedInstanceState) 20 setContentView(R.layout.activity_main) 21 supportActionBar?.hide() 22 realm = Realm.getDefaultInstance() 23 list.layoutManager = LinearLayoutManager(this) 24 //TodoのCollectionを返す 25 val todos = realm.where<Todo>().findAll() 26 val adapter = TodoAdapter(todos) 27 list.adapter = adapter 28 29 //saveボタン押下時に、新しいtodoを登録 30 save.setOnClickListener { 31 realm.executeTransaction { 32 val maxId = it.where<Todo>().max("id") 33 val nextId = (maxId?.toLong() ?: 0L) + 1 34 //Primary Keyを与えて、引数型のオブジェクトを生成する 35 val newTodo = it.createObject<Todo>(nextId) 36 newTodo.todo = addTodo.text.toString() 37 } 38 } 39 40 //fab押下時、チェック済みのtodoを一括削除 41 fab.setOnClickListener { 42 if (checkBox.isChecked) { 43 44 } 45 } 46 47 //ItemTouchHelper 48 val itHelper = ItemTouchHelper( 49 object: ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP or ItemTouchHelper.DOWN, ItemTouchHelper.LEFT) { 50 override fun onMove( 51 recyclerView: RecyclerView, 52 viewHolder: RecyclerView.ViewHolder, 53 target: RecyclerView.ViewHolder 54 ): Boolean { 55 val fromPosition = viewHolder?.adapterPosition 56 val toPosition = target?.adapterPosition 57 58 realm.executeTransaction { 59 todos.deleteFromRealm(fromPosition) 60 //ここでドロップ位置にドラッグしている項目を挿入したいです 61 62 } 63 //Adapterにドラッグアンドドロップされたことを通知します。 64 adapter.notifyItemMoved(fromPosition, toPosition) 65 return true 66 } 67 68 69 override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) { 70 viewHolder.let { 71 realm.executeTransaction { 72 todos.deleteFromRealm(viewHolder.adapterPosition) 73 } 74 adapter.notifyItemRemoved(viewHolder.adapterPosition) 75 } 76 } 77 78 } 79 ) 80 itHelper.attachToRecyclerView(list) 81 82 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問