更改远程领域(在Realm对象服务器上)时不通知Fragment [英] Not notify Fragment when remote Realm (on Realm Object Server) was changed
本文介绍了更改远程领域(在Realm对象服务器上)时不通知Fragment的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
当我启动Android应用程序时,我登录到Realm Object Server并从Realm Server Object下载(同步)数据. 好的. 现在我进入显示人员列表的片段.
When I start Android app I login to Realm Object Server and download (sync) data from Realm Server Object. OK. Now I got to Fragment that show list of persons.
此处代码:
public class PersonsFragment extends Fragment {
private ListView notEmptytsListView;
private Realm realm;
private RealmResults<Person> personsRealmResults;
private PersonsAdapter personsAdapter; // RealmBaseAdapter<Organization>
private RealmChangeListener realmChangeListener;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.persons_fragment, container, false);
init(rootView);
return rootView;
}
private void init(View view) {
realm = Realm.getDefaultInstance();
notEmptytsListView = (ListView) view.findViewById(R.id.notEmptytsListView);
personsRealmResults = realm.where(Person.class).findAllSorted(Person.NAME);
personsAdapter = new PersonsAdapter(personsRealmResults);
notEmptytsListView.setAdapter(personsAdapter);
// NOT CALL WHEN DATA ON REALM OBJECT SERVER WAS CHANGED
realmChangeListener = new RealmChangeListener() {
@Override
public void onChange(Object object) {
personsAdapter.notifyDataSetChanged();
}
};
personsRealmResults.addChangeListener(realmChangeListener);
}
@Override
public void onDestroy() {
super.onDestroy();
realm.removeChangeListener(realmChangeListener);
realm.close();
}
}
如果我停留在Fragment上,并且在Realm Object Server(远程Realm)上更改了数据,则本地数据不同步.不调用方法onChanged().
If I stay on Fragment and data changed on Realm Object Server (remote Realm) the local data is not sync. Not call method onChanged().
我该如何解决?
推荐答案
public class MyFragment extends Fragment {
RealmResults<Person> personsRealmResults; // <--
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.persons_fragment, container, false);
notEmptytsListView = (ListView) view.findViewById(R.id.notEmptytsListView);
realm = Realm.getDefaultInstance();
personsRealmResults = realm.where(Person.class).findAllSorted(Person.NAME);
personsAdapter = new PersonsAdapter(personsRealmResults);
notEmptytsListView.setAdapter(personsAdapter);
realmChangeListener = new RealmChangeListener() {
@Override
public void onChange(Object object) {
// call when data on Realm Object Server was changed
}
};
personsRealmResults.addChangeListener(realmChangeListener);
return rootView;
}
@Override
public void onDestroyView() {
super.onDestroyView();
realm.removeChangeListener(realmChangeListener);
realm.close();
}
}
尽管PersonsAdapter
是 RealmBaseAdapter
. (请参见文档)
这篇关于更改远程领域(在Realm对象服务器上)时不通知Fragment的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文