Not notify Fragment when remote Realm (on Realm Object Server) was changed

眉间皱痕 提交于 2019-12-25 00:14:58

问题


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.

Here code:

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();
    }
}

If I stay on Fragment and data changed on Realm Object Server (remote Realm) the local data is not sync. Not call method onChanged().

How I can fix this?


回答1:


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();
    }
}

Although it'd probably be easier if PersonsAdapter was a RealmBaseAdapter. (see docs)



来源:https://stackoverflow.com/questions/45713592/not-notify-fragment-when-remote-realm-on-realm-object-server-was-changed

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!