当对数组适配器使用GetPosition时,具有相等字段的对象返回不相等
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当对数组适配器使用GetPosition时,具有相等字段的对象返回不相等相关的知识,希望对你有一定的参考价值。
我已经在android Xamarin中创建了一个下拉列表,我希望从该下拉列表中自动选择页面加载时的下拉列表值。启动页面时,将为它传递一个Num值为52的MyClass对象。向我的下拉列表传递了一个ArrayAdapter,该适配器具有MyClass对象的列表,其中之一的Num值为52。当我尝试[C0 ],因为mySpinner.SetSelection(recommendedPosition);
返回-1],所以它不起作用
我认为以下文章中的示例(向我展示了如何重写MyClass的Equals和Hash函数)将对我有所帮助,但仍然导致返回-1。当我在它们上放置一个断点时,似乎这些被覆盖的函数没有被命中..但是我知道GetPosition方法调用IndexOf,这应该导致被覆盖的函数被调用。myClassAdapter.GetPosition(recommendedValue)
在此示例中,MyClass具有一个Num字段。但是我的代码在MyClass中具有更多属性,所有这些属性在荐值与listMyClass中的一项之间都是相等的。
在我调用的ViewPager的InstantiateItem中:
https://www.javaworld.com/article/3305792/comparing-java-objects-with-equals-and-hashcode.htmlMyClass.cs
var recommendedValue = new MyClass("52");
var List<MyClass> listMyClass = new List<MyClass> { new MyClass("52"), new MyClass("46") };
mySpinner = view.FindViewById<Spinner>(Resource.Id.mySpinner);
var myClassAdapter = new MyClassAdapter(view.Context, listMyClass);
mySpinner.Adapter = myClassAdapter;
//*
// I need the following to not return -1
//*
var recommendedPosition = myClassAdapter.GetPosition((MyClass)recommendedValue);
我已经在Android Xamarin中创建了一个下拉列表,我希望从该下拉列表中自动选择页面加载时的下拉列表值。启动页面时,将为它传递一个Num值为52的MyClass对象。My ...
也许您可以考虑不使用public class MyClass: Java.Lang.Object
{
private string Num { get; set; } = "";
public MyClass() {}
public MyClass(int? num)
{
Num = String.IsNullOrEmpty(num) ? "" : num;
}
public string GetNum()
{
return Num;
}
public override bool Equals(object other)
{
return Equals(other as MyClass);
}
public bool Equals(MyClass otherItem)
{
if (otherItem == null)
{
return false;
}
return otherItem.Num == Num;
}
public override int GetHashCode()
{
int hash = 19;
hash = hash * 31 + (Num == null ? 0 : Num.GetHashCode());
return hash;
}
}
方法,您可以直接获得这样的职位:
以上是关于当对数组适配器使用GetPosition时,具有相等字段的对象返回不相等的主要内容,如果未能解决你的问题,请参考以下文章