在Xamarin.Android中将数据从一个活动传递到另一个活动

7

我希望在Xamarin.Android应用程序中从一个活动传递一个Class Object到另一个活动。 我可以使用Intent.PutExtra方法传递简单字符串。

有人知道该如何实现吗?任何帮助都将不胜感激 :)


你可以在 Xamarin 商店上使用一个叫做 Simple storage 的组件,它会为你完成大部分的工作。https://components.xamarin.com/view/simple-storage - InitLipton
2个回答

13

为了其他人能够找到这篇文章,我在这里补充一下。使用 Xamarin/.NET 的好处在于如何轻松地使用 JSON。您可以将数据序列化为字符串并通过 Extras 传递。

JSON.NET 是一个很好的库(您可以在 Xamarin 组件商店中找到它),还有一些内置的 .NET JSON 类。使用 JSON.NET 的示例如下。

Intent i = new Intent(Application.Context, typeof(SecondActivity));
i.PutExtra("key", JsonConvert.SerializeObject(myObject));
StartActivity(i);

在另一个Activity中,您可以对其进行反序列化。

var obj = JsonConvert.DeserializeObject<OBJ_TYPE>(Intent.GetStringExtra("key"));

在我看来,这比使用静态引用更好。


谢谢,我真的没想到 :) 但是我需要通过引用传递对象 :) - loop

3

这个概念与标准应用程序(非Xamarin)相同。

您可以使用 Intent#putExtra(String, Parcelable) 作为额外参数传递任何实现 Parcelable 接口的对象。

Parcelable 接口有点复杂,因此请务必阅读文档以确保您的类符合要求。您可能还想查看 此 SO 问题 以获取有关创建 Parcelable 类的更多信息。

您无法通过 Intent 传递对象引用。这是因为活动被设计为完全独立于彼此工作。用户可以在执行其他任务时将您的 Activity 抛到后台,因此很可能会回收您的 Activity 变量。当用户稍后返回您的 Activity 时,它应该能够重新创建其状态。

如果你确实需要直接传递一个对象的引用,可以将该对象设为静态变量。虽然这是解决从一个Activity传递数据到另一个Activity的问题的一种快速而简单的方法,但它并不能解决该变量在某个时刻可能被垃圾回收的问题,并且通常不是一个好的设计选择。

我对Android还比较新,您的意思是用这种方式吗:https://dev59.com/L2bWa4cB1Zd3GeqPZrl9。 - loop
是的,这将是传递静态变量的一个例子。请注意,这仍然容易受到您的变量被垃圾回收的影响,因此如果您的静态变量为空,您需要在第二个Activity中有备用计划。 - Bryan Herbst
用这个信息更新你的答案,我标记为正确。但目前+1。 - loop
@Tanis.7x 为什么所有 Parcelable 实现的示例都是 Java?使用 Xamarin 的想法不是要全部使用 C# 吗? - Ricardo stands with Ukraine
2
@Riga 因为Xamarin的Parcelable文档只是Google文档的复制粘贴,而Google文档通常更好地涉及API的操作。这里有一篇博客文章,提供了一个很好的Xamarin示例 - Bryan Herbst
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接