我遇到了一个问题,我真的很难过。我刚刚开始尝试在Visual Studio中使用Xamarin创建一个Android应用程序,并且我正在尝试使用Intent将List<int>
传递给新活动。这是我的MainActivity.cs
代码。
using Android.App;
using Android.Widget;
using Android.OS;
using System.Collections.Generic;
using Android.Views;
using Android.Content;
namespace adrd_count {
[Activity(Label = "adrd_count", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : ListActivity {
static readonly List<int> savedCounters = new List<int>();
protected override void OnCreate(Bundle bundle) {
base.OnCreate(bundle);
// Set our view from the "main" layout resource
// SetContentView (Resource.Layout.Main);
savedCounters.Add(3);
savedCounters.Add(2342);
savedCounters.Add(-122211);
savedCounters.Add(9);
savedCounters.Add(1941);
ListAdapter = new ArrayAdapter<int>(this, Android.Resource.Layout.SimpleListItem1, savedCounters);
}
protected override void OnListItemClick(ListView l, View v, int position, long id) {
var t = savedCounters[position];
var intent = new Intent(this, typeof(Counter));
intent.PutIntegerArrayListExtra("saved_counter", savedCounters);
StartActivity(intent);
}
}
}
现在让我感到困惑的是这一行:
intent.PutIntegerArrayListExtra("saved_counter", savedCounters);
给我这个错误:
Argument 2: cannot convert from 'System.Collections.Generic.List<int>' to 'System.Collections.Generic.IList<Java.Lang.Integer>'
因为据我所知,我用C#编码...而不是Java。据我所知,在C#中没有像Integer
这样的东西,超越语言障碍的错误让我觉得我做的事情非常糟糕。我只是错误地阅读了吗?我一直在用Java编程吗?我该怎么办?
答案 0 :(得分:0)
使用List<T>
创建通用C#Java.Lang.Integer
,并通过Intent
分配给PutIntegerArrayListExtra
:
var intList = new List<Integer>() { (Integer)0, (Integer)1 };
~~~~
intent.PutIntegerArrayListExtra("saved_counter", intList);
构造Intent
时,您通过C#对象及其包装器与基于Java的对象进行交互,因此有两个&#34; peer&#34;两个虚拟机上的对象,Art / Dalvik和Mono。所以,是的,Java规则适用于该对象,但内置了转换....
答案 1 :(得分:0)
您可以使用C#Json.Net将List或任何对象作为意图传递。
可以使用JSON.Net将任何对象序列化为字符串(json字符串)
string listAsString = JsonConvert.SerializeObject(item);
intent.PutExtra ("saved_counter", listAsString);
然后您可以将其转换回您的列表&lt;&gt;如下:
string listAsString = Intent.GetStringExtra ("saved_counter");
List<Integer> savedCounter JsonConvert.DeserializeObject<List<Integer>> (listAsString);