当对数组适配器使用GetPosition时,具有相等字段的对象返回不相等

问题描述 投票:1回答:1

我已经在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.html

MyClass.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 ...

c# xamarin.android
1个回答
0
投票

也许您可以考虑不使用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; } } 方法,您可以直接获得这样的职位:

© www.soinside.com 2019 - 2024. All rights reserved.