【问题标题】:Monodroid putting parcelable objects to bundleMonodroid 将可打包的对象打包
【发布时间】:2013-05-23 09:37:24
【问题描述】:

所以我一直在努力将一些值放入我重写的 OnSaveInstanceState 的包中。我需要在活动重启时保存一些类对象,这意味着它们必须是可打包的,这对于 Monodroid 来说似乎是不可能实现的?

来源:http://docs.xamarin.com/android/about/limitations

我可以做些什么来将这些类对象保存到捆绑包中而不使用 parcelable?我从服务器加载数据,并且我不希望再次执行此操作,例如在用户轮换时再次调用 OnCreate 方法。因此,保存它们会很好,这可以为服务器节省一些偶尔轮换等的压力。

【问题讨论】:

    标签: android bundle xamarin.android parcelable


    【解决方案1】:

    这个问题最初被接受的答案虽然在被回答时是正确的,但现在已经不是这样了。

    我最初实现了上述建议,后来通过更多搜索发现:

    http://dan.clarke.name/2012/09/implementing-iparcelable-in-mono-for-android/

    现在支持该功能,上面的链接是关于如何实现它的一个很好的资源。

    【讨论】:

    • 看来 Monodroid 终于支持 Parcelable 了,这是正确的答案。
    【解决方案2】:

    无法在 Mono for Android 中实现 IParcelable 接口。取自the docs

    此时无法实现 IParcelable 接口,因为 android.os.Parcelable 接口要求:

    • 实现 Parcelable 接口的类还必须有一个名为 CREATOR 的静态字段,它是实现
      Parcelable.Creator 界面。

    由于mandroid.exe目前不能生成字段,所以这个接口 无法实施。将在未来的版本中添加支持。

    您可以采取的另一种方法是将对象存储在活动之外,例如在子类Application 的类中。您可以使用静态属性将数据存储在应用程序类中,也可以使用活动中的Application 属性访问其上的实例属性/方法。更多关于使用Application的细节可以在this question找到。

    【讨论】:

    • 我最终在这种情况下使用了静态变量,感谢您的澄清
    • 文档已经更新,据说现在支持这个(“此限制适用于 4.1 版本之前的版本。在 4.1 版本中,您可以使用 ExportAttribute 和 ExportField 属性生成 Java 方法和可以显式命名的字段。”)。我现在要试一试,并发布任何积极的发现。
    猜你喜欢
    • 2013-11-26
    • 2011-08-06
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多