【问题标题】:pass data from one activity to another in Xamarin.Android在 Xamarin.Android 中将数据从一个活动传递到另一个活动
【发布时间】:2014-09-25 19:35:40
【问题描述】:

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

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

【问题讨论】:

标签: c# android xamarin


【解决方案1】:

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

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

【讨论】:

  • 谢谢,我真的没有想到 :) 但我需要通过引用传递对象 :)
【解决方案2】:

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

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

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

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

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

【讨论】:

  • 对象会作为引用传递吗?
  • 没有。它将被捆绑到一个Parcel 中,然后在您检索它时从该Parcel 中恢复。
  • 我怎样才能实现对象到另一个活动的这种引用传递?
  • 我建议你不要。活动旨在完全独立地运行。用户有可能(并且很可能)在执行其他任务时将您的 Activity 扔到后台,稍后再返回。那时,您尝试维护的对象可能已被垃圾回收。如果你真的需要,你可以静态存储对象并在新的 Activity 中检索它。
  • @Riga 因为Xamarin's documentation for Parcelable 只是 Google 文档的复制粘贴,而且 Google 的文档在 API 发生的情况方面通常更好。 Here's a blog post with a good Xamarin example.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-31
  • 2020-05-18
  • 1970-01-01
  • 1970-01-01
  • 2013-01-12
  • 2017-12-10
相关资源
最近更新 更多