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

本文关键字:活动 一个 另一个 Android Xamarin 数据 | 更新日期: 2023-09-27 18:24:37

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

有人知道吗?感谢任何帮助:)

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

只是添加以防其他人遇到此问题。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"));

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

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

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

Parcelable接口有点复杂,所以一定要阅读文档以确保您的类符合要求。您可能还想看看这个SO问题,了解有关创建Parcelable类的更多信息。

不能通过Intent传递对象引用。这是因为活动被设计为彼此完全独立地工作。用户可以在执行其他任务时将"活动"放到后台,因此"活动"的变量完全有可能(而且很可能)被垃圾收集。当用户稍后返回"活动"时,它应该能够重新创建其状态。

如果确实需要直接传递对对象的引用,可以通过将该对象设置为静态变量来实现。虽然这是一种快速而肮脏的方法来解决将数据从一个活动获取到另一个活动的问题,但它并不能解决变量在某个时刻可能被垃圾收集的问题,而且通常是一种糟糕的设计选择。