gpt4 book ai didi

c# - 使用 Xamarin 的 Mono for Android 将可移植类传递给 Activity

转载 作者:搜寻专家 更新时间:2023-11-01 07:55:29 24 4
gpt4 key购买 nike

我正在使用 Xamarin 开发一个应用程序,该应用程序将在 Windows Phone、iOS 和 Android 上发布。该项目包含大量用于所有三个版本的可移植代码。

目前我正在开发 Android 应用程序并遇到了一个问题 - 我需要将我的一个可移植类(一个包含一些原始值的简单模型)传递到一个 Activity 中。这应该是实现 IParcelable 的一个简单案例,但因为这是一个可移植类,我不能简单地扩展 Java.Lang.Object,所以我不确定这会给我留下什么。

如何在不更改可移植类的情况下允许通过 bundle 将我的模型传递给 Activity ?

我正在谈论的一个非常简单的例子:

可移植模型

// 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 中传递的数据最少,您就可以保持类不变并使用 Json.NET用于序列化。例如:

string jsonModel = JsonConvert.SerializeObject(myModel);
intent.PutExtra("model", jsonModel);

然后在你的其他 Activity 中,它会是这样的:

string json = intent.getExtra("model");
Model model = JsonConvert.DeserializeObject<MyModel>(json);

关于c# - 使用 Xamarin 的 Mono for Android 将可移植类传递给 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28282266/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com