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;
}