Android:使用微调器更新RealmObject

Android:使用微调器更新RealmObject,android,realm,Android,Realm,我有两个真实的对象,比如 public class Dog extends RealmObject { @Required private String name; private int age; } public class Person extends RealmObject { @Required private String name; private Dog dog; // A person has only one dog (

我有两个真实的对象,比如

public class Dog extends RealmObject {
    @Required
    private String name;
    private int age;
    }
public class Person extends RealmObject {
    @Required
    private String name;
    private Dog dog; // A person has only one dog (a relationship)
    }
在其中一个活动中,我想让用户为给定的人选择狗

我想我会用旋转器

我还从领域示例中获得了一个示例代码,它为ListView做了类似的工作

public class DogListAdapter extends RealmBaseAdapter<Dog> implements SpinnerAdapter
其中,
RealmUtils.resultIndexOf
是一个小型实用函数:

public static int resultIndexOf(RealmResults results, RealmObject obj) {
    for(int i=0; i < results.size(); i++ ) {
        if(results.get(i) == obj) {
            return i;
        }
    }
    return 0;
}
public static int resultIndexOf(RealmResults results,RealmObject obj){
对于(int i=0;i
这是行不通的。我怀疑可能是因为realm.changeListeners被调用,并且每当更新项时微调器都会重置为第一项


我认为有更好的方法可以做到这一点,因为这应该是一个常见的模型视图用例。

我认为这也会发生在用户选择上,而不仅仅是第一个默认选择。我的猜测是,当数据更改时,您选择的索引需要更改。因此,与其存储索引,不如存储选定的狗,然后计算索引并在更改侦听器中调用
dogNameSpinner.setSelection
。感谢您的时间和评论。我发现问题在于计算索引。我认为我们不能使用==运算符。一件事是,它必须投给狗类。即使在那之后,它也不起作用。我不知道为什么。出现
Person.dog
将不会通过任何
结果上的
=
运算符。获取(i)
。我假设,在一个领域实例中,相同底层模型的所有Java RealMobject都指向相同的地址。这似乎不是真的。因此,我必须用
results.get(I).getName().equals(obj.getName())
替换
results.get(I)==obj
,有没有办法测试两个RealmObject是否确实指向同一个对象?是的,使用
RealmObject.equals()
。您必须确保它们都是由Realm管理的
RealmObject
,而不是由
new realmxxobject()
创建的独立对象。我认为这也会发生在用户选择上,而不仅仅是第一个默认选择。我的猜测是,当数据更改时,您选择的索引需要更改。因此,与其存储索引,不如存储选定的狗,然后计算索引并在更改侦听器中调用
dogNameSpinner.setSelection
。感谢您的时间和评论。我发现问题在于计算索引。我认为我们不能使用==运算符。一件事是,它必须投给狗类。即使在那之后,它也不起作用。我不知道为什么。出现
Person.dog
将不会通过任何
结果上的
=
运算符。获取(i)
。我假设,在一个领域实例中,相同底层模型的所有Java RealMobject都指向相同的地址。这似乎不是真的。因此,我必须用
results.get(I).getName().equals(obj.getName())
替换
results.get(I)==obj
,有没有办法测试两个RealmObject是否确实指向同一个对象?是的,使用
RealmObject.equals()
。您必须确保它们都是由Realm管理的
RealmObject
,而不是由
newrealmxxobject()
创建的独立对象。
public static int resultIndexOf(RealmResults results, RealmObject obj) {
    for(int i=0; i < results.size(); i++ ) {
        if(results.get(i) == obj) {
            return i;
        }
    }
    return 0;
}