2016-06-25 4 views
1

RealChangeListenerを使用して、notifydatasetgchanged()を呼び出すことによって、データ変更をリッスンし、リストビューを更新しています。Realmchangelistenerのnotifydatasetchanged()を呼び出す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. reamlChangeListnerでnotifyDataSetChanged()を呼び出すことがベストプラクティスですか?
  2. すべてのcommitTransaction()について私は realmChangeListenerが呼び出されると思います。notifyDataSetChanged()を何度も呼び出すのはいいですか?
  3. 上記の練習がうまくいかない場合は、私が考慮する必要のある代替案がある場合は、 をお勧めします。

おかげ

答えて

1
  1. はい
  2. は、私はあなたがUIを更新あまりにも多くの時間を避けるためにbeginTransaction()/commitTransaction()間のループを置くことができると思います。
  3. https://realm.io/docs/java/latest/#adaptersを参照してください。レルムのアダプターを使用することができます。 mEntityListAdapter.setData(realmResults);では、それが同じであればいつも呼び出される必要はないようです。RealmResults
関連する問題