问题描述
嗨,我是Android的初学者开发者:)我想将ArrayList<Custom>
值从Activity
发送到Fragment
。
我知道必须使用Bundle
,但我不知道什么方法可以帮助我。
-
putSerializable
和putParcelable
什么不同? -
在我的情况下,哪种方法可以帮我
putParcelableArrayList
或putSerializable
?
谢谢所有给我机会成长:)
1楼
Serializable
和Parcelable
都是一个接口。
前者与java一样古老。
它允许您以持久的方式存储/写入对象。
它的美妙之处在于您只需实现界面即可。
后者, Parcelable
,是特定于Android的。
它比Serializable
更快,但您必须实现接口的方法才能使用它。
putSerializable和putParcelable有什么不同
putSerializable
接受执行对象Serializable
,putParcelable接受实施对象Parcelable
在我的情况下,哪种方法可以帮我putParcelableArrayList或putSerializable?
很难说。
一般来说,我会说Parcelable
2楼
一般来说, Parcelable
比Serializable
更快。
如果你想了解更多关于它的更多信息,这是一篇很棒的文章
3楼
除了为给定键添加到地图的实际值之外,putSerializable和putParcelable之间没有区别。
putParcelableArrayList也是如此。
在给定的键上,您将读取SparseArray<? extends Parcelable>
SparseArray<? extends Parcelable>
。
Blackbelt解释得非常好。
从我的角度来看,您不需要在内部使用Serializable。 我建议使用android的容器进行消息(Parceable)。 您永远不会知道Android SDK的用途,并且您确实希望确保最大程度的兼容性。 请记住,Android拥有自己的SDK(不是Java)。
4楼
对于你必须实现Parcelable
或Serializable
类,两者都允许持久性。
Parcelable
更快,您将编写更多功能以使其工作:
describeContents() writeToParcel(Parcel out, int flags) Parcelable.Creator<MyClass> CREATOR = new Parcelable.Creator<MyClass>() MyClass(Parcel in) //an constructor for Parcel object (Parcelable)
Serializable
较低,但您只需在类上添加接口即可使其工作:
private static final long serialVersionUID = 0L;
应该在实现Serializable的类中设置
5楼
android中的是一个接口,每个想要使用intent传递不同活动的对象都必须实现这个接口。这个接口有两个我们必须implements: describeContent()
返回一个int和writeToParcel(Parcel dest, int flags)
返回一个void。
实现此接口的类必须有一个名为CREATOR
的静态字段,操作系统使用它来重新创建对象。可以通过Android中的Intent传递可分辨的Parcelable数组。
这是在活动之间传递数据并利用所有android功能的最优雅方式。
当需要通过网络发送数据或存储在文件中时,通常会使用 。