Parcelable接口说明
Explanation about Parcelable Interface
我正在研究界面 Parcelable
,但在试图完全理解它的工作原理时遇到了一些问题。
在互联网上我没有找到我的一些问题的答案:
我给你看我的 Class:
public class Media implements IModel, Parcelable{
private Uri uri;
private long _ID;
private boolean isOnDb = false;
private boolean isSelected = false;
/*Getter and setter methods
........
*/
/*********************************** Parcelable **********************************/
public static final Parcelable.Creator CREATOR = new Parcelable.Creator<Media>(){
@Override
public Media createFromParcel(Parcel parcel) {
return new Media(parcel);
}
@Override
public Media[] newArray(int i) {
return new Media[i];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeParcelable(uri, 1);
parcel.writeLong(_ID);
parcel.writeByte((byte) (isOnDb ? 1 : 0));
parcel.writeByte((byte) (isSelected ? 1 : 0));
}
private Media (Parcel parcel){
uri = parcel.readParcelable(Uri.class.getClassLoader());
_ID = parcel.readLong();
isOnDb = parcel.readByte() != 0;
isSelected = parcel.readByte() != 0;
}
}
问题 1
如您所见,我有一个只有 2 个字段 Media(Uri uri, long _ID)
的构造函数。如果方法 writeToParcel()
和构造函数 private Media (Parcel parcel)
在它们的体内管理 4 个字段,这是一个问题吗?我的意思是...由 private Media (Parcel parcel)
和 writeToParcel()
管理的字段应该反映传递给 "other" 构造函数的字段数?
问题 2
我应该如何管理 Uri
字段?我这样做的方式是否正确?
P.S.: 不明白为什么不能写parcel.writeSerializable(Uri);
即使 Uri
class implements Serializable
.
我也收到编译错误
提前致谢
Is it a problem if the method writeToParcel() and the constructor private Media (Parcel parcel) menage 4 fields inside their body?
应该没问题。
How should I manage a Uri field? Is it correct the way I did it?
你有的应该没问题。就我个人而言,我会把它与字符串相互转换,只是因为我讨厌搞乱类加载器。
I get a compile error even though Uri class implements Serializable.
Uri
没有实现 Serializable
。它实现了 Parcelable
。参见 the JavaDocs。
我正在研究界面 Parcelable
,但在试图完全理解它的工作原理时遇到了一些问题。
在互联网上我没有找到我的一些问题的答案:
我给你看我的 Class:
public class Media implements IModel, Parcelable{
private Uri uri;
private long _ID;
private boolean isOnDb = false;
private boolean isSelected = false;
/*Getter and setter methods
........
*/
/*********************************** Parcelable **********************************/
public static final Parcelable.Creator CREATOR = new Parcelable.Creator<Media>(){
@Override
public Media createFromParcel(Parcel parcel) {
return new Media(parcel);
}
@Override
public Media[] newArray(int i) {
return new Media[i];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeParcelable(uri, 1);
parcel.writeLong(_ID);
parcel.writeByte((byte) (isOnDb ? 1 : 0));
parcel.writeByte((byte) (isSelected ? 1 : 0));
}
private Media (Parcel parcel){
uri = parcel.readParcelable(Uri.class.getClassLoader());
_ID = parcel.readLong();
isOnDb = parcel.readByte() != 0;
isSelected = parcel.readByte() != 0;
}
}
问题 1
如您所见,我有一个只有 2 个字段 Media(Uri uri, long _ID)
的构造函数。如果方法 writeToParcel()
和构造函数 private Media (Parcel parcel)
在它们的体内管理 4 个字段,这是一个问题吗?我的意思是...由 private Media (Parcel parcel)
和 writeToParcel()
管理的字段应该反映传递给 "other" 构造函数的字段数?
问题 2
我应该如何管理 Uri
字段?我这样做的方式是否正确?
P.S.: 不明白为什么不能写parcel.writeSerializable(Uri);
即使 Uri
class implements Serializable
.
提前致谢
Is it a problem if the method writeToParcel() and the constructor private Media (Parcel parcel) menage 4 fields inside their body?
应该没问题。
How should I manage a Uri field? Is it correct the way I did it?
你有的应该没问题。就我个人而言,我会把它与字符串相互转换,只是因为我讨厌搞乱类加载器。
I get a compile error even though Uri class implements Serializable.
Uri
没有实现 Serializable
。它实现了 Parcelable
。参见 the JavaDocs。