Android 带有 Listfragment 的 RealmBaseAdapter

Android RealmBaseAdapter with Listfragment

我有一个带有自定义适配器的 ListFragment,它应该从 RealmBaseAdapter 扩展,实现 ListAdapter,以便在任何更改时刷新视图。我从 Realm 查询一个用户,得到 his/her 个朋友,其中 return 是一个 RealmList

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

此查询 return 一个 RealmList,因为我以这种方式将它存储在我的用户 class 中:

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. 创建自己的 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();