2016-04-05 5 views
1

У меня есть recyclerview, который показывает список студентов. Все учащиеся проходят в реальном мире в адаптере.Android: как сохранить realmlist обновлен в UI

Когда пользователь может запросить обновление данных, сервер отправляет список студентов обратно пользователю. Что я делаю сейчас, это загрузить всю информацию с сервера, сохранить ее в db, а не извлекать ее из базы данных (через realmresults) и преобразовать realmresult в realmlist.

Мой вопрос: как правильно обновить интерфейс? Я видел в документации, что в realmlist есть управляемый режим, в котором они автоматически обновляют ui. Что это за управляемый режим? Что это значит? Как использовать realmlist, чтобы сохранить его в управляемом состоянии? И что такое правильный способ (aka best practice) использовать realmlists?

Обратите внимание, что я не могу хранить свою информацию как realmresult напрямую, потому что im выполняет некоторые манипуляции с данными, которые я не хочу, чтобы они были сохранены.

ответ

4

управляемый объект по сравнению с Standalone

автономной RealmObject/RealmList создается с помощью конструктора объекта или методы Realm.copyFromRealm(). Доступ к данным, находящимся в автономном объекте, не будет проходить через движок подчеркивания, вместо этого он ведет себя как обычный объект. Таким образом, автономный объект не будет обновляться при изменении данных. Примеры для автономного объекта:

MyModel myModel = new MyModel(); // Standalone 

MyModel model = realm.where(MyModel.class).findFirst(); // This is managed object. 
MyModel standaloneModel = realm.copyFromRealm(model); // The returned value is standalone object. 

MyList myList = new MyList(); // Standalone 

Управляемый RealmObject/RealmList имеют доступа к данным, хотя основной механизм хранения данных в царстве. Они создаются, когда вы выполняете запрос из Realm или возвращаете из copyToRealm() (и его варианты методов). Как:

MyModel model = realm.where(MyModel.class).findFirst(); 

MyModel model = new MyModel(); // This is a standalone object. 
model = realm.copyToRealm(modle); // The returned value is managed by Realm now. 

MyList myList = realm.where(MyModel.class).findFirst().getMyList(); 

Как правильно обновить пользовательский интерфейс

Предложение использует слушателей изменений Realm в. См. https://realm.io/docs/java/latest/#notifications

И что такое правильный способ (aka best practice) использовать RealmList?

Это немного запутанно, но Realm вводит RealmCollection в следующий крупный релиз (v0.89.0). См. https://github.com/realm/realm-java/pull/2345.

Обратите внимание, что я не могу хранить свою информацию как realmresult напрямую, потому что im выполняет некоторые манипуляции с данными, которые я не хочу, чтобы они были сохранены.

Если RealmList находится в управляемом режиме, изменения данных также будут сохранены. Если вы не хотите, чтобы некоторые данные были сохранены, вы можете рассмотреть возможность использования аннотации @Ignore в этих полях.См https://realm.io/docs/java/latest/#ignoring-properties


Обновление на 04072016

RealmList VS. RealmResults:

RealmList список RealmObject сохраняется как поле RealmObject. Он представляет отношения «один ко многим» в Царстве.

RealmResults - результат запроса.

Оба они (если RealmList в управляемом режиме) будут автоматически обновляться при изменении данных.

Вы можете получить RealmResults от RealmList по RealmList.where() как:

RealmResults results = myRealmList.where().findAll(); 

Этот ответ будет немного устаревший после Realm v0.89.0 выпустили из-за нового RealmCollection.

+0

Привет! Спасибо за ваш ответ! Не могли бы вы рассказать мне, в чем разница между realmlist и realmresults? Если оба могут изменить базовые данные, то почему кто-либо должен использовать realmlist? Я имею в виду, что если я правильно понимаю, realmresults всегда обновляют мой пользовательский интерфейс, так почему я должен их использовать? В чем разница между realmresults и realmlist? Когда мы должны использовать каждый из них? –

+0

Ответ обновлен. – beeender

+0

Спасибо за аналога снова :) Я решил, что мой лучший вариант на данный момент - использовать realmlist, так как я могу добавить и удалить mmethods много, что-то, что не возможно с realmresults, я надеюсь, что realmcollections также будут иметь этот метод также. Это дает нам возможность гибко хранить разные списки одновременно и добавлять к ним новую информацию, не сохраняя их в базе данных. –