2016-08-01 4 views
0

я получаю RealmResults в упражнение, как показано ниже:метод OnChange не работает

citySceneryBeanRealmResults = realm.where(CitySceneryBean.class).equalTo("cityid", pp.getCurrentCityId()).findAll() 

тогда я получаю RealmObject в другой B активность и установите realmobject в RealmChangeListener как показано ниже:

bean = realm.where(CitySceneryBean.class).equalTo("id", mVid).findFirst(); 
bean.addChangeListener(new RealmChangeListener<CitySceneryBean>(){ 
     @Override 
     public void onChange(CitySceneryBean element) { 
      Log.i(SceneryDetailActivity.class, "onChange"); 
      noManagedBean = realm.copyFromRealm(element); 
      refreshData(); 
     } 
    }); 

Я подтвердил, что «bean» ReamlObject содержится в citySceneryBeanRealmResults, теперь, когда citySceneryBeanRealmResults изменен, а в A Activity I подтверждается, что связанный bean-компонент обновлен, но в B-операции метод onChange не работает, почему?

+0

«Не работает», как в «не будет называться» или «исключает исключение»? – Fildor

+0

не называется! – liujiankun

+0

Где вы закрываете экземпляр Realm для Activity, где у вас есть .addChangeListener? если вы закрываете экземпляр Realm перед внесением изменений в данные, тогда вы не сможете получить обратный вызов. –

ответ

0

Вы должны убедиться, что RealmChangeListener - это переменная поля.

RealmChangeListener realmChangeListener = new RealmChangeListener<CitySceneryBean>(){ 
    @Override 
    public void onChange(CitySceneryBean element) { 
     Log.i(SceneryDetailActivity.class, "onChange"); 
     noManagedBean = realm.copyFromRealm(element); 
     refreshData(); 
    } 
}; 

void someMethod() { 
    bean = realm.where(CitySceneryBean.class).equalTo("id", mVid).findFirst(); 
    bean.addChangeListener(realmChangeListener); 
} 
Смежные вопросы