【问题标题】:ArrayAdapter.getPosition is not finding my objectArrayAdapter.getPosition 没有找到我的对象
【发布时间】:2018-09-22 05:51:49
【问题描述】:

Android 新手,我有一个简单的应用程序,其中包含微调器和相关的 ArrayAdapter 工作:当事物被选中时,我似乎能够并触发一些计算。然后我正在保存当前选定的项目。

在某些时候,我检索保存的值,并希望将微调器定位在该值处:基本上是 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);
    }
}

/* 片段如下*/

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

【问题讨论】:

标签: android


【解决方案1】:

适配器在内部使用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()

【讨论】:

  • 就是这样。谢谢!现在,我真的很想知道为什么我在任何地方都没有找到这些信息......如果你在某个地方有一个 good android 指南,我想知道。再次感谢!
  • 基本上在 POJO 对象上使用搜索时到处使用,尽管有时您必须通过源代码了解内部工作以编写解决方案并乐于提供帮助!
  • @Pavneet_Singh 你能给我一个完整的例子吗?它可以帮助新的 Android 开发人员。
  • 我得到了一个很好的例子来正确实现equals和hashcode方法geeksforgeeks.org/override-equalsobject-hashcode-method
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多