使用Parcelable将一个对象从一个Android活动传递到另一个活动

8

我想做这件事

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 活动?
3个回答

7
创建您的类并实现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);?谢谢! - Namratha

6
正如错误提示所示,在这种情况下,您需要使您的类(在本例中为myClass)实现Parcelable。如果您查看 Bundle文档,所有的putParcelable方法都以某种形式采用Parcelable或其集合。(考虑到名称,这是有道理的。)因此,如果您想使用该方法,则需要具有Parcelable实例才能放入捆绑包中...。
当然,您不一定要使用putParcelable - 您可以代替实现Serializable并调用putSerializable

我明白了。但是我在这里读到(http://shri.blog.kraya.co.uk/2010/04/26/android-parcel-data-to-pass-between-activities-using-parcelable-classes/),Serializable 会影响性能,而Parcelable则不会。此外,我仍然无法将我的对象转换为Parcelable实例。 - Namratha
@Namratha:那里的性能影响没有量化(而且那是两年前的事情)。我只是给出另一个选项 - 如果您可以使用Parcelable,那就去使用它。不太清楚你正在尝试做什么。 - Jon Skeet
我只是想将我的自定义对象传递到另一个活动(B类),以便我可以调用该对象上的方法,从而修改A类的成员变量。我知道我必须实现Parcelable接口,并在writeToParcel方法中将字段写入包裹中。现在,鉴于我的自定义类仅包含方法而没有成员变量,我该如何将其转换为Parcelable? - Namratha
@Namratha:如果自定义类没有成员变量,那么它本身就没有有用的信息,所以你真正想传递什么? - Jon Skeet
我希望Activity B能够调用我在Activity A中实例化的对象上的方法。我基本上想传递一个对象,以便我可以调用其实现的方法。 - Namratha
显示剩余5条评论

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接