2015-11-29 5 views
0

У меня есть ListFragment с пользовательским адаптером, который должен распространяться из RealmBaseAdapter, реализует ListAdapter, чтобы обновить представление, если что-либо изменилось. Я запрос пользователя из Realm, и получить его/ее друзей, которая возвращает RealmListAndroid RealmBaseAdapter с Listfragment

RealmList<User> users =realm.where(User.class).equalTo("id",userid).findFirst().getFriends() 

Этот запрос возвращает RealmList, как хранить его в своем классе User так:

public class User extends RealmObject implements Serializable { 
@PrimaryKey 
private long id; 
private RealmList<User> friends = new RealmList<>(); 

Так я не может это сделать, потому что RealmBaseAdapter, нуждается в realmResult:

MySportmateListAdapter adapter = new MySportmateListAdapter(getContext(), users); 

можете ли вы помочь мне, что такое решение для этого? В пользователе я думаю, что изменить RealmList на RealmResults невозможно, правда?

ответ

0

Есть три дороги, вы можете пойти:

  1. Создайте свой собственный ArrayAdapter и добавить OnChangeListener к экземпляру Realm, и вызвать notifyDataSetChange() при каждом изменении.

  2. Если каждый пользователь содержит всех своих друзей в друзьях RealmList, вы можете использовать этот запрос: realm.where(User.class).equalTo("friends.id", userId).findAll(). Он найдет всех пользователей, у которых есть Пользователь с id userId в своих друзьях RealmList.

  3. Получить список друзей путем создания запроса путем объединения всех друзей Идентификаторы:

    RealmList<User> friends = realm.where(User.class).equalTo("id", userid).findFirst().getFriends() 
    
    RealmQuery<User> query = realm.where(User.class); 
    
    for(User friend : friends) { 
        query = query.or().equalTo("friends.id", friend.getId()); 
    } 
    
    RealmResults<User> results = query.findAll(); 
    
+0

Первое спасибо за Ваш ответ! 1. Я пробовал это, но, возможно, я делаю что-то не так, потому что видимые строки не обновились, но если я прокручу вниз и назад, у них появились новые значения. 2. Невозможно для меня, потому что не у всех пользователей есть свои друзья в базе данных мобильных устройств. 3. Это подходящее решение для меня, НО я думаю, что мне нужно написать query = query.or(). EqualTo ("id", friend.getId()); внутри! Еще раз спасибо :) –

+0

Cool. Что касается 3-го варианта: возможно, я не понимаю вас правильно, но 'query = query.or(). EqualTo (" friends.id ", friend.getId());' находится в for-loop в моем примере кода. –