在realm.io实时数据更新功能的情况下,如何最好地呈现UI模型表示



这个问题围绕着确定一种最佳、高性能的最佳实践方法来在UI中直观地显示两个列表视图对象之间的一对多关系,其中左列表视图中的项目与右列表视图中许多对象相关联,并由realm.io数据存储支持。

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

例如,假设一个Song对象列表("Moonlight Sonata,Color My World,Welcome to the Jungle"),每个对象都可能与一个或多个流派对象实例("Classical,Romantic Era,1800年代,Rock,70年代,Pop,80年代")相关联。假设歌曲表有数千或数万首歌曲,而流派表有数百或数千种流派。

在UI中,用户会看到左侧的歌曲列表和右侧的流派列表。用户点击一首歌曲,然后可以多选右侧的哪些流派应该与该歌曲相关联。

这种关系必须存储——在领域中,我假设这是在Song表中建模的,作为流派对象的RealmList。

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

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

或者,这根本不是一个领域问题,而是一个如何根据当前Song对象中是否包含所渲染流派的ID来渲染listview项对象的函数?

欢迎输入!

Realm,尤其是RealmResults将延迟加载所有数据,这与大多数ORM不同。这意味着你有10首歌还是100000首歌都无关紧要。它将同样具有表演性。

在您的情况下,听起来可能需要双向建模(由于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;
}

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

最新更新