带有Listfragment的Android RealmBaseAdapter

时间:2015-11-29 11:43:25

标签: android realm

我有一个带有自定义适配器的ListFragment,它应该从RealmBaseAdapter扩展,实现ListAdapter以便在任何更改时刷新视图。我从Realm查询用户,并让他/她的朋友返回RealmList

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,我是对的吗?

1 个答案:

答案 0 :(得分:0)

你可以走三条路:

  1. 创建您自己的ArrayAdapter并将OnChangeListener添加到Realm实例,并在每次更改时调用notifyDataSetChange()

  2. 如果每个用户在RealmList朋友中都包含其所有朋友,那么您可以使用此查询:realm.where(User.class).equalTo("friends.id", userId).findAll()。它会在朋友RealmList中找到所有ID为 userId 的用户。

  3. 通过组合所有朋友ID来创建查询来获取朋友列表:

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