CustomListing currentListing = new CustomListing();
Intent i = new Intent();
Bundle b = new Bundle();
b.putParcelable(Constants.CUSTOM_LISTING, currentListing);
i.putExtras(b);
i.setClass(this, SearchDetailsActivity.class);
startActivity(i);
在新开始的活动代码将是这样的......
Bundle b = this.getIntent().getExtras();
if (b != null)
mCurrentListing = b.getParcelable(Constants.CUSTOM_LISTING);
6 回答
在创建意图对象时,可以使用以下两种方法在两个活动之间传递对象 .
putParcelable
putSerializable
您可以让您的类实现Parcelable或Serializable . 然后,您可以跨活动传递自定义类 . 我发现这非常有用 .
这是我正在使用的一小段代码
在新开始的活动代码将是这样的......
您可以创建Application的子类并将共享对象存储在那里 . 只要存在一些活动组件,Application对象就应该存在于应用程序的生命周期中 .
从您的活动中,您可以通过
getApplication()
访问应用程序对象 .此答案特定于要传递的对象具有嵌套类结构的情况 . 使用嵌套类结构,使其成为Parcelable或Serializeable有点单调乏味 . 并且,序列化对象的过程是not efficient on Android . 考虑下面的例子,
使用Google的GSON library,您可以直接将对象解析为JSON格式的String,并在使用后将其转换回对象格式 . 例如,
现在,您可以将此String作为具有活动意图的StringExtra跨活动传递 .
然后在接收活动中,从字符串表示创建原始对象 .
它使原始类保持清洁和可重用 . 最重要的是,如果这些类对象是从Web创建为JSON对象的,那么这个解决方案非常有效且节省时间 .
UPDATE
虽然上面解释的方法适用于大多数情况,但出于明显的性能原因,不要依赖Android的捆绑额外系统来传递对象 . 有许多解决方案使这个过程灵活高效,这里有一些 . 每个都有自己的优点和缺点 .
Eventbus
Otto
也许这是一个不受欢迎的答案,但在过去我只是使用了一个类,它对我希望通过活动持久存在的对象有静态引用 . 所以,
我尝试了Parcelable接口路径,但遇到了很多问题,代码中的开销对我来说没什么吸引力 .
这取决于您需要访问的数据类型 . 如果你有某种类型的数据池需要持续跨越
Activity
,那么Erich的答案是要走的路 . 如果你只需要将一个对象从一个活动传递到另一个活动,那么你可以让它们实现Serializable
并在Intent
的额外内容中传递它们以启动新的Activity
.您的对象也可以实现Parcelable接口 . 然后,您可以使用
Bundle.putParcelable()
方法并在intent中的活动之间传递您的对象 .Photostream应用程序使用此方法,可以用作参考 .