【发布时间】:2016-11-30 21:48:54
【问题描述】:
我有一个由 Realm findAll() 支持的 RecyclerView。我使用 RealmChangeListener 来通知列表有关更新的信息,鉴于大量使用钝器 notifyDataSetChanged(),一切都运行得非常好。
private RealmResults<Sale> allSales;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
....
// Update sales list whenever the AllSales result changes
allSales = getRealm().where(Sale.class).findAll();
allSalesListener = new RealmChangeListener<RealmResults<Sale>>() {
@Override
public void onChange(RealmResults<Sale> results) {
saleAdapter.notifyDataSetChanged();
}};
allSales.addChangeListener(allSalesListener);
....
但是,我真的很想拥有良好的 MVVC 结构,将所有 Realm 代码保留在 ViewModel 中,并保留在我的 Fragment 之外。 Realm 示例不这样做。并且可能有充分的理由——我没有看到一种优雅的方式来适当地通知适配器 RealmResults 的变化。数据绑定还没有;它似乎不支持使用 ObservableCollection 支持 RecyclerView...即使支持,RealmResult 也不是 ObservableCollection。
此时,我想我需要在我的 Fragment 中创建一个“ListChangedListener”接口,并为我的 ViewModel 中的每个 List 属性手动维护一组侦听器。但这似乎是为了维护 View/Model 分离而编写的大量额外代码。
TLDR:我正在寻找一个 Realm 支持的 ListView 或 RecyclerView 示例,在 View 代码中 没有任何 Realm 代码。甚至只是让我确信我的自定义“监听器”界面是一条不错的前进道路。
更新:我不知何故忽略了 RealmRecyclerViewAdapter。请参阅下面的答案。
【问题讨论】: