给定realm.io实时数据更新功能,如何最好地呈现UI模型表示?

时间:2017-02-04 04:33:31

标签: android realm

这个问题围绕着确定一个最佳的,高效的最佳实践方法,在两个listview对象之间以可视方式显示UI中的一对多关系,其中左侧listview中的项目与右侧列表视图中的许多对象相关联,并且支持通过realm.io数据存储。

情况是我有两个对象列表,并且需要UI以允许用户在视觉上创建它们之间的映射。这两个列表直接映射到Realm中的表,映射将逻辑上表示列表2中的多个实例与列表1中的单个对象相关。

例如,假设一个Song对象列表(“Moonlight Sonata,Color My World,Welcome to the Jungle”),每个对象都可以与一个或多个类型对象实例相关联(“古典,浪漫时代,1800年代” ,摇滚,70年代,流行音乐,80年代“)。假设歌曲表有数千或数万首歌曲,以及拥有数百或数千种类型的流派表。

在用户界面中,向用户显示左侧的歌曲列表和右侧的流派列表。用户点击一首歌,然后可以多选择右边哪些类型应与该歌曲相关联。

这种关系必须存储 - 在领域我假设这是在Song表中建模为类型对象的RealmList。

棘手的部分是如何快速,实时地更新右侧的流派列表视图,以便在选择左侧的每个歌曲对象时显示“选择”。视觉上“选择”哪些歌曲将匹配用户之前选择的歌曲。

这是最好的做法吗?我试图避免右侧列表视图的arraylist后备存储,而是能够使用标准游标直接操作数据,但由于选择状态变化如此之快,或许这根本无法实现?

或者这可能根本不是一个领域问题,而且更多的是如何根据正在渲染的类型的ID是否包含在当前Song对象中来呈现listview项目对象?

输入欢迎!

1 个答案:

答案 0 :(得分:0)

与大多数ORM不同,Realm尤其是RealmResults将延迟加载所有数据。这意味着如果您有10首歌曲或100.000则无关紧要。它的表现同样出色。

在你的情况下,听起来似乎想要对两种方式进行建模(因为Java尚未添加对反向链接的支持:https://github.com/realm/realm-java/issues/607)以便于更改侦听器:

public class Genre extends RealmObject {
  private String name;
  private List<Song> songs;
}

public class Song extends RealmObject {
  private String title;
  private List<Genre> genres;
  private boolean selected;
}

这样您就可以独立地连接您的流派视图和歌曲视图。