gpt4 book ai didi

android - ArrayAdapter.getPosition 找不到我的对象

转载 作者:行者123 更新时间:2023-11-29 18:43:34 24 4
gpt4 key购买 nike

Android 的新手,我得到了一个简单的应用程序,其中包含微调器和相关的 ArrayAdapters:当事情被选中时,我似乎能够触发一些计算。然后我将保存当前选择的项目。

在某些时候,我检索保存的值,并希望将微调器定位在该值:基本上是 setPosition() 微调器到该对象。

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

调试,我已经验证我传递的对象不为空,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);
}
}

/* fragment 看起来像这样*/

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

最佳答案

适配器在内部与 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 因为你没有在 MyClass 中正确实现 equalshashcode 方法所以实现这两种方法,你将能够得到精确的索引。

引用:

Use Auto Generate

difference between equals() and hashCode()

关于android - ArrayAdapter.getPosition 找不到我的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52453897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com