RealmResult与适配器的许多关系

时间:2015-05-24 15:48:54

标签: java android realm

我有两个模型(具有相关属性)看起来像这样:

Playlist.java

@PrimaryKey
String id;
String name;
RealmList<Song> songs;

Song.java

@PrimaryKey
String id;
String name;

正如您所看到的,播放列表可以包含许多歌曲,并且歌曲可以属于许多播放列表。

在我的应用程序的一部分中,我使用RealmBaseAdapter在RecyclerView中显示所有歌曲。我完成这个没问题:

RealmResults<Song> songResult = realm.where(Song.class).findAll();
RealmSongsAdapter realmAdapter = new RealmSongsAdapter(getActivity().getApplicationContext(), songResult , true);
songAdapter.setRealmAdapter(realmAdapter);

我的问题是:我将如何仅为某个播放列表显示歌曲?由于Song.java没有引用它自己的播放列表,我无法获得RealmResult基于播放列表对象。理想情况下,我想要像:

Playlist playlist = realm.where(Playlist.class).equalTo("id", playlistID).findFirst();
RealmResults<Song> playlistSongs = playlist.getSongs();

但是playlist.getSongs()会返回RealmList<Song>而不是RealmResult<Song>

我找到的一个解决方案是根据播放列表中的歌曲ID创建RealmQuery,但这似乎是违反直觉的:

RealmQuery<Song> query = mRealm.where(Song.class);
for (Song song : playlist.getSongs()) {
    query = query.or().equalTo("id", song.getId());
}
RealmResults<Song> results = query.findAll();

另一个问题是,每次播放列表歌曲列表发生变化时,我都必须重新创建此查询。

有更简单的方法吗?提前谢谢!

1 个答案:

答案 0 :(得分:1)

来自境界的克里斯蒂安。目前,如果您不想在RealmList<Playlist>上维护Song字段,那么除了您自己找到的方法之外别无他法。也就是说我们在TODO上有一个名为Backlinks的概念,它正是针对这样的用例:https://github.com/realm/realm-java/issues/607