在Realmchangelistener中调用listview notifydatasetchanged()很好吗?

时间:2016-06-25 12:58:14

标签: java realm

我们正在使用RealChangeListener来监听数据更改并通过调用notifydatasetgchanged()来更新listview。

初始同步时间我们从服务器获取许多记录(每批100条记录),循环结果更新Realm,如下面的后台线程。

for(int i=0;i<results.size();i++)
{
  // processing and validation
  ....
  db.beginTransaction();
  db.copyToRealm(processedObject);
  db.commitTransaction();
}

在活动中,我们注册了realmResults更改监听器,如下面的代码

 @Override
 public void onStart() {
    super.onStart();

  mEntityDataProvider = new EntityDataProvider();
  mEntityDataProvider = mEntityDataProvider.getListAsync();    
  mEntityDataProvider.addChangeListener(realmEntityChangeListener);

 }

 private RealmChangeListener<RealmResults<Entity>> realmEntityChangeListener = new RealmChangeListener<RealmResults<Entity>>() {
    @Override
    public void onChange(RealmResults<Entity> realmResults) {
        if (mEntityListAdapter!= null) {
            mEntityListAdapter.setData(realmResults);
            mEntityListAdapter.notifyDataSetChanged();
        }
    }
};

问题:

  1. 最佳做法是在
    中调用notifyDataSetChanged() reamlChangeListner?
  2. 我想每个commitTransaction() 将调用realmChangeListener,调用notifyDataSetChanged()多次调用是不是很好?
  3. 如果以上练习不好做, 建议我是否需要考虑任何替代方案。
  4. 谢谢

1 个答案:

答案 0 :(得分:1)

  1. 我认为您可以将循环放在beginTransaction() / commitTransaction()之间,以避免刷新UI太多次。
  2. 请参阅https://realm.io/docs/java/latest/#adapters,您可以使用Realm的适配器。并且mEntityListAdapter.setData(realmResults);似乎没有必要每次都被调用,如果它在同一个RealmResults上。