ArrayAdapter
是 Android 开发中用于将数据绑定到 ListView
或 Spinner
等视图组件的一种适配器。它通常用于显示简单的数据列表。GetPosition
方法用于获取指定对象在适配器中的位置。
当使用 ArrayAdapter
的 GetPosition
方法时,如果两个对象具有相等的字段,但返回的位置不同,这通常是由于对象的 equals
和 hashCode
方法没有正确重写导致的。
Java 中的 ArrayList
或数组在内部使用 equals
方法来比较对象是否相等。默认情况下,equals
方法比较的是对象的引用,而不是对象的内容。因此,即使两个对象的内容相同,它们的引用也可能不同,导致 GetPosition
返回不同的位置。
要解决这个问题,需要重写对象的 equals
和 hashCode
方法,确保它们基于对象的字段进行比较。
假设我们有一个简单的 Person
类:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Getters and setters
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
在上面的代码中,我们重写了 equals
和 hashCode
方法,确保它们基于 name
和 age
字段进行比较。
List<Person> people = new ArrayList<>();
people.add(new Person("Alice", 30));
people.add(new Person("Bob", 25));
ArrayAdapter<Person> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, people);
// 获取位置
int position = adapter.getPosition(new Person("Alice", 30));
Log.d("Position", "Position of Alice: " + position);
这种重写 equals
和 hashCode
方法的方法适用于任何需要在 ArrayAdapter
中正确比较对象的场景,例如:
通过正确重写 equals
和 hashCode
方法,可以确保 ArrayAdapter
的 GetPosition
方法能够正确地返回具有相等字段的对象的位置。
领取专属 10元无门槛券
手把手带您无忧上云