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);
答案 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
中正确实现hashcode
和MyClass
方法,因此实现这两种方法,您将能够获得精确的结果。索引。
Referene: