ArrayAdapter.getPosition找不到我的对象

时间:2018-09-22 05:51:49

标签: android

Android的新手,我有一个简单的应用程序,它具有微调器和相关的ArrayAdapters:当选择事物时,我似乎能够触发一些计算。然后,我要保存当前选择的项目。

在某个时候,我检索了保存的值,并想将微调器定位到该值:基本上将微调器设置为该对象的setPosition()。

我发现很多教程都具有相同的格式:在ArrayAdapter上使用getPosition(),然后传入您要查找的对象...问题是,它一直返回-1(未找到)。

调试,我已经验证了我传递的对象不为null,ArrayAdapter也是如此,并且ArrayAdapter getCount还向我返回了它应该具有的项目(因此它不为空)。

我很茫然。欣赏任何指针吗? :-)

/ * ArrayAdapter类看起来像这样* /

public class MyAdapter extends ArrayAdapter<MyClass> {
    // Constructor
    MyAdapter(@NonNull Context context, int resource, @NonNull List<MyClass> objects) {
        super(context, resource, objects);
    }
}

/ *片段看起来像这样* /

final MyAdapter mAdapter = new MyAdapter(
                                 requireActivity(), 
                                 android.R.layout.simple_spinner_item, 
                                 objects);
Spinner mySpinner = fragment_view.findViewById(R.id.my_spinner);
mySpinner.setAdapter(mAdapter);

// assume I have one "object" of MyClass,
// and want to search for it in "MyAdapter"

int spinnerPosition = mAdapter.getPosition(objectToBeFound);  // returns -1
mySpinner.setSelection(spinnerPosition);

1 个答案:

答案 0 :(得分:2)

适配器内部可与List

一起使用
public int getPosition(@Nullable T item) {
    return mObjects.indexOf(item);
}

所以getPosition内部依赖于List#indexOf(T),并且依赖于equals方法

(o==null ? get(i)==null : o.equals(get(i)))

因此得到-1是因为您没有在equals中正确实现hashcodeMyClass方法,因此实现这两种方法,您将能够获得精确的结果。索引。

Referene:

Use Auto Generate

difference between equals() and hashCode()