使用 Xamarin 的 Mono for Android 将便携式 Class 传递给 Activity
Passing a portable Class to an Activity with Xamarin's Mono for Android
我正在使用 Xamarin 开发一个应用程序,它将在 Windows Phone、iOS 和 Android 上发布。该项目包含大量用于所有三个版本的可移植代码。
目前我正在开发 Android 应用程序并遇到 运行 问题 - 我需要传递我的一个便携式 classes(一个简单的模型,其中包含一个几个原始值)转换为 activity。这应该是实现 IParcelable 的一个简单案例,但是因为这是一个可移植的 class 我不能简单地扩展 Java.Lang.Object,所以我不确定这会把我留在哪里。
如何让我的模型通过捆绑包传递给 activity 而无需更改便携式 class?
我正在谈论的一个非常简单的例子:
便携机型
// This cannot be changed
class MyModel {
public int Number { get; set; }
public string Text { get; set; }
}
实现IParcelable的模型
// I have tried this, however IParcelable requires inheriting from Javal.Lang.Object
// This throws a notimplementedexception
class MyParcelableModel : MyModel, IParcelable {
public int DescribeContents()
{
return 0;
}
public void WriteToParcel(Parcel dest, ParcelableWriteFlags flags)
{
dest.WriteInt(Number);
dest.WriteString(Text);
}
}
最后,这就是我想将此模型传递给 activity
的方式
var intent = new Intent(Activity, typeof(MyActivity));
var bundle = new Bundle();
bundle.PutParcelable("model", model); // 'model' is an instance of MyParcelableModel
intent.PutExtras(bundle);
Activity.StartActivity(intent);
只要您要在 Intent 中传递的数据最少,您就可以保持 class 不变,并使用 Json.NET 进行序列化。例如:
string jsonModel = JsonConvert.SerializeObject(myModel);
intent.PutExtra("model", jsonModel);
那么在你的另一个 Activity 中,它会是这样的:
string json = intent.getExtra("model");
Model model = JsonConvert.DeserializeObject<MyModel>(json);
我正在使用 Xamarin 开发一个应用程序,它将在 Windows Phone、iOS 和 Android 上发布。该项目包含大量用于所有三个版本的可移植代码。
目前我正在开发 Android 应用程序并遇到 运行 问题 - 我需要传递我的一个便携式 classes(一个简单的模型,其中包含一个几个原始值)转换为 activity。这应该是实现 IParcelable 的一个简单案例,但是因为这是一个可移植的 class 我不能简单地扩展 Java.Lang.Object,所以我不确定这会把我留在哪里。
如何让我的模型通过捆绑包传递给 activity 而无需更改便携式 class?
我正在谈论的一个非常简单的例子:
便携机型
// This cannot be changed
class MyModel {
public int Number { get; set; }
public string Text { get; set; }
}
实现IParcelable的模型
// I have tried this, however IParcelable requires inheriting from Javal.Lang.Object
// This throws a notimplementedexception
class MyParcelableModel : MyModel, IParcelable {
public int DescribeContents()
{
return 0;
}
public void WriteToParcel(Parcel dest, ParcelableWriteFlags flags)
{
dest.WriteInt(Number);
dest.WriteString(Text);
}
}
最后,这就是我想将此模型传递给 activity
的方式var intent = new Intent(Activity, typeof(MyActivity));
var bundle = new Bundle();
bundle.PutParcelable("model", model); // 'model' is an instance of MyParcelableModel
intent.PutExtras(bundle);
Activity.StartActivity(intent);
只要您要在 Intent 中传递的数据最少,您就可以保持 class 不变,并使用 Json.NET 进行序列化。例如:
string jsonModel = JsonConvert.SerializeObject(myModel);
intent.PutExtra("model", jsonModel);
那么在你的另一个 Activity 中,它会是这样的:
string json = intent.getExtra("model");
Model model = JsonConvert.DeserializeObject<MyModel>(json);