2017-08-16 17 views
0

Androidアプリを起動すると、Realm Object Serverにログインし、Realm Server Objectからデータをダウンロード(同期)します。 OK。 今私は人のショーリストを断片化するようになった。ここでリモートRealm(Realm Object Server上の)が変更されたときにフラグメントを通知しません

コード:

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

私は断片に滞在し、データをローカルデータが同期していないレルムオブジェクト・サーバ(リモートレルム)に変更した場合。 onChanged()メソッドを呼び出しません。

どうすれば修正できますか?

+0

コードの一部がフォーマットされていないため、校正をお読みください。 – SteveFest

+0

ローカル変数だけでなく、フィールド変数としてRealmResultsを格納する必要があります。 – EpicPandaForce

答えて

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

PersonsAdapterRealmBaseAdapterだった場合、それはおそらくより簡単になると思いますが。 (docsを参照してください)

+0

です。ここで私のアダプタ: 'public class PersonssAdapter extends RealmBaseAdapter はListAdapter'を実装しています – lmdic

+0

助けてください。同じ結果。 * onChange()*を呼び出さない。投稿時に私の更新されたコードを見てください。アプリケーションを再起動すると、データはローカルでのみ変更されます。 – lmdic

+0

上記のコードはうまくいくはずなので、他の何かが正しいとは限りません。変更が100%ダウンロードされていますか? –

関連する問題