実現したいこと
- Realm DBの特定カラムの状態が変わった際に、RealmBaseAdapterのフィルタ表示を更新したい
前提
業務でjava + kotlinを使用し、あるAndroidアプリを開発しております。
ある機能のリスト表示について解決できない箇所があり、質問させていただきました。
概要については以下となります。
- Realm DBにて、ある設定を保存している
- ステータスカラムを持ち、クラウドとの同期状態などを管理している(以下イメージ)
UUID | 作成ユーザー | 設定名 | 設定詳細説明 | ステータス |
---|---|---|---|---|
UUID1 | 田中 | 鳥 | 飛べる | 同期済み |
UUID2 | 伊藤 | 犬 | おりこう | 編集後、未同期 |
UUID3 | 田中 | 猫 | 可愛い | ローカルで削除支持 |
- 上記の内容をRealmBaseAdapterを使用し、ListView#setAdapterに使用して表示している。
- 表示する際は、以下の条件でフィルタして表示している
- 現在アプリにログインしているユーザーが作成した設定
- 同期状態が「ローカルで削除済み」以外の設定を表示
- 上記をとった例として、「田中」でログインしている場合は、上記のUUID1のみ表示したいです。
発生している問題・エラーメッセージ
- 上記DBの「ステータス」が「ローカルで削除支持」になった時にリスト表示から非表示にしたいが、表示されたままになってしまう。
- 上記をとった例として、「田中」でログインしている状態で、UUID1の「ローカルで削除支持
」に更新した際に、フィルタが適用されずに、UIに表示され続けてしまう。
該当のソースコード
業務のコードのため、イメージとしての内容です。
該当画面に遷移時、以下の処理を行います。
基本的に、フィルタに関しては、以下以外に特段必要な処理な無い認識でいたのですが、認識違いがあればご指摘いただけると幸いです。
RealmBaseAdapterに渡すRealmResultの取得
java
1RealmResults<HogeHogeRealmObject> result = realm.where(HogeHogeRealmObject.class) 2 .equalTo("name", "田中") 3 .beginGroup() 4 .notEqualTo("status", 3) // 3 = 削除 5 .endGroup() 6 .findAll() 7 .sort("name", Sort.ASCENDING);
上記resultをRealmBaseAdapterを継承したadapterの初期化時に渡す
java
1 HogehogeAdapter(RealmResult<HogeHogeRealmObject> result) { 2 super(result) // RealmBaseAdapterに渡す 3 }
試したこと
- 上記のフィルタ処理自体は、正しく除外されて返却されているため、ステータスの更新自体はは出来ている。
- しかしUIには、常に全レコードが表示されてしまい、フィルタが適用されていない様な動作となっている。
- レコードの追加、削除が行われるとUIは正しく更新されている。
- 公式ガイドを確認して、同じ方法でフィルタ処理を実装
補足情報(FW/ツールのバージョンなど)
- realm
- android OS
あなたの回答
tips
プレビュー