【问题标题】:how to communicate between Activity(s) using non-primitive object如何使用非原始对象在 Activity 之间进行通信
【发布时间】:2011-02-11 10:47:18
【问题描述】:

Activity(s) 是否可以使用用户定义的对象进行通信?

附言

  1. 据我所知,当我希望 Activity(s) 相互通信时,我必须使用原始类型的对象,例如 int、String、boolean 等。

  2. 我们不使用 Serializable、Parcelable 和静态类。

【问题讨论】:

  • 一种方法虽然不是一个好习惯,但用作公共静态,然后它可以在任何类中访问

标签: android android-activity


【解决方案1】:

如果在调用 Intent 时提到 extras,您可以在对象中实现 Serializable 或 Parcelable 接口以传递它们。

您也可以将该对象放入自己的Application 类实现中,并在Activity 或Service 类as described in my other answer 中访问它。但请记住,以这种方式共享状态可能是您设计中更普遍问题的标志。

【讨论】:

  • 谢谢你,mcveat。除了 Serializable 或 Parcelable 接口,还有其他的实现方式吗?
  • @Charles Wu 也许我对这个问题的回答会给你一些其他的提示:stackoverflow.com/questions/4907491/…
【解决方案2】:

你有几个选择:

1.您可以将更复杂的结构包装在一个实现 Parcelable 接口的类中,该接口可以存储在一个额外的中。

2.你可以将更复杂的结构封装在一个实现Serializable接口的类中,可以将其存储在一个额外的

3.您使用静态数据成员来传递东西,因为它们都在同一个进程中

4.您使用外部存储(文件、数据库、SharedPreferences)

5.正如刚刚发帖的人所说,使用通用组件,例如自定义应用程序或本地服务

你不想做的是通过额外的东西传递大的东西。例如,如果您正在创建一个从相机中抓取图片的应用程序,您不希望通过额外的内容传递这些 - 使用静态数据成员(听起来很恶心)。 Intent 被设计为跨进程工作,这意味着会进行一定数量的数据复制,当不需要大数据时,您希望避免这种情况。

回复来自 here

【讨论】:

    【解决方案3】:
    Intent myintent = new Intent(Info.this, GraphDiag.class).putExtra("<StringName>", value);
    startActivity(myintent);
    

    在父活动中使用上面的代码

    在子活动中

    int s= getIntent().getIntExtra("<StringName>");
    

    在同一个你检索浮点、字符、字符串值

    【讨论】:

    • 它用于原始数据类型而不是问题中所要求的非原始数据类型
    • 谢谢 User333,但我想使用非原始类型。您告诉的方式不适用于非原始类型。您还有其他想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多