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

loo*_*oop 6 c# android xamarin

我想Class ObjectXamarin.Androidapp 中将一个活动传递给另一个活动.我可以使用Intent.PutExtra方法传递简单的字符串.

有人知道吗.感谢anyhelp :)

kev*_*ree 12

只是添加以防其他人遇到这个.关于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);
Run Code Online (Sandbox Code Playgroud)

另一方面,Activity你可以反序列化它.

var obj = JsonConvert.DeserializeObject<OBJ_TYPE>(Intent.GetStringExtra("key"));
Run Code Online (Sandbox Code Playgroud)

在我看来,这比使用静态参考更好.


Tan*_*.7x 3

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

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

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

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

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

  • @Riga 因为 [Xamarin 的 Parcelable 文档](https://developer.xamarin.com/api/type/Android.OS.Parcelable/) 只是 Google 文档的复制粘贴,而 Google 的文档通常在以下方面更好API 正在发生。[这里有一篇博客文章,其中包含一个很好的 Xamarin 示例](http://dan.clarke.name/2012/09/implementing-iparcelable-in-mono-for-android/)。 (2认同)