【问题标题】:How to pass ArrayList<my_custom_class> to an other activity?如何将 ArrayList<custom class> 传递给另一个活动?
【发布时间】:2011-08-10 13:21:30
【问题描述】:

这个问题有两部分

我正在尝试将 ArrayList 从一个 Activity 传递给另一个。这个Arraylist 包含一些从我创建的类中实例化的对象(包含一些字符串和一个Drawable)。

我在网上发现我需要上课Parcelable,这是一个问题,尤其是Drawable。(这是第一部分)

一旦我的班级实现了Parcelable,我将如何发送/获取我的Arraylist

【问题讨论】:

    标签: android android-intent drawable parcelable


    【解决方案1】:

    您可以将您的 ArrayList 设为公共静态,并且可以通过将其称为 Activity_name.array_list_name 来访问您想要的任何位置。

    其中 Activity_name 是您将在其中定义 ArrayList 的类名。

    【讨论】:

    • 感谢您的回答..将 arrayList 设置为公共可能是一个解决方案,但我想将其发送到下一个活动(这将更改它并且这些更改只需要保留在此活动中)所以我需要知道如何让我的班级可以打包
    • 不,如果你将它定义为 public static,它不会改变 ArrayList 中的值。
    • 实际上对 static 对象所做的更改将在整个应用程序中进行,这将无济于事..
    • 否则您可以创建一个扩展应用程序的类并相应地工作。
    【解决方案2】:

    我强烈建议您重新评估您的架构。出于多种原因,您不应该跨活动边界传递可绘制对象,包括上下文泄漏、位图泄漏以及可能打破 IPC 调用的大小限制。

    如果您真的需要这种行为,正确的方法是将您的可绘制数据保存在数据库/SharedPreference 中,并将您的位图保存到文件中,然后当第二个活动开始时,您可以通过拉入数据来重新创建这些可绘制数据和图片。

    您能否描述一下为什么两个不同的活动需要访问同一个可绘制对象列表?我怀疑一些重组可以完全避免这个问题。

    【讨论】:

    • 感谢您的回复,首先该列表不只包含可绘制对象,传递此类列表的原因是第一个活动有一个表单,并且会在进行一些操作后调用 Web 服务研究。结果包括一些图像 url,并将加载到列表视图和接下来将启动的活动中。所以我猜想发送drawable会更好,然后从网上加载两次......不是吗?我希望我说清楚了,
    • 好吧,那么让我问你这个问题——当你旋转设备并经历销毁/创建周期时,你的第一个活动会发生什么?或者,如果您按下 Home,然后长按 Home 按钮返回您的应用程序会怎样?您的图像正在重新下载,或者您崩溃。您需要将这些下载的图像保存在磁盘上的临时缓存中,以便您无需下载即可再次访问它们。一旦你这样做了,从下一个活动中访问它们也应该是微不足道的。
    【解决方案3】:

    如果不扩展对象Parcelable.. 是不可能传递对象的。所以我建议创建一个名为store() 的类,并将其设为singleTon。它有一个ArrayList() 类型的私有字段。并为同一个变量创建getter和setter,无论你在哪里创建对象,只要说store().getInstance().setObject(yourObject);

    同时得到

    store().getInstance().getObject();
    

    【讨论】:

    • 感谢您的建议,但如果有人知道如何使用其中的可绘制对象实现 Parcelable,我会感到很痛苦。
    猜你喜欢
    • 1970-01-01
    • 2014-02-10
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多