【问题标题】:Use Parcelable to pass an object from one android activity to another使用 Parcelable 将对象从一个 android 活动传递到另一个
【发布时间】:2020-02-17 18:25:57
【问题描述】:

我想这样做

class A extends Activity{
       private class myClass{
       }
       myClass obj = new myClass();

      intent i = new Intent();
      Bundle b = new Bundle();
      b.putParcelable(Constants.Settings, obj); //I get the error The method putParcelable(String, Parcelable) in the type Bundle is not applicable for the arguments (int, A.myClass)
      i.setClass(getApplicationContext(),B.class);
      startActivity(i);  
    }

如何使用 Parcelable 将 obj 传递给活动 B?

【问题讨论】:

    标签: android object android-activity bundle parcelable


    【解决方案1】:

    创建你的类并实现Serializable

    private class myClass implements Serializable  {
       }
    

    并且喜欢:

    myClass obj = new myClass();
    Intent aActivity = (A.this, B.class);
    intent.putExtra("object", obj);
    

    在接收方:

    myClass myClassObject = getIntent().getSerializableExtra("object");  
    

    【讨论】:

    • 我想你的意思是 Intent aActivity = new Intent(A.this, B.class); ?谢谢!
    【解决方案2】:

    正如错误提示的那样,您需要使您的类(在本例中为myClass)实现Parcelable。如果您查看documentation for Bundle,所有putParcelable 方法都采用Parcelable 或某种形式的集合。 (根据名称,这是有道理的。)因此,如果您想使用该方法,则需要将 Parcelable 实例放入捆绑包中...

    当然,您必须使用putParcelable - 您可以实现Serializable 并调用putSerializable

    【讨论】:

    • 我对Serializable接口的理解是,它是用来支持序列化和反序列化的。这在这里如何适用?另外,即使我实现了 Parcelable,我如何将我的对象转换为一个包裹?你能给我举个例子吗?
    • @Namratha:您正在尝试传递信息,这正是序列化的用途。如果您在同一个流程中工作,那么据我所知,您根本不需要捆绑包 - 但是如果您需要在流程之间传递信息,那么您正在谈论的是一种或其他形式的序列化.
    • 我明白了。但我在这里读到shri.blog.kraya.co.uk/2010/04/26/…,Serializable 与性能下降有关,而 Parcelable 则没有。此外,我仍然无法尝试将我的对象转换为 Parcelable 实例。
    • @Namratha:那里的表现没有量化(那是两年前的事了)。我只是把它作为另一个 option - 如果你可以使用 Parcelable,那就去吧。目前还不清楚您要做什么。
    • 我只是想将我的自定义对象传递给另一个活动(B 类),以便我可以调用该对象上的方法来修改 A 类的成员变量。我知道我必须实现Parcelable 接口和 writeToParcel 方法中我必须将字段写入包裹。现在,鉴于我的自定义类只包含方法而没有成员变量,如何将其转换为 Parcelable?
    【解决方案3】:

    Parcelable 是编写代码的难题,但比 Serializable 更具成本效益。看看下面给出的链接 -

    Parcelable Vs Serializable

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-04
      • 2015-08-26
      • 2018-10-10
      • 2013-01-12
      • 1970-01-01
      相关资源
      最近更新 更多