[英]Parcelable writeToParcel(): What's the best way to write multiple variables of the same type?
我有十个字符串:str1,str2,str3 ...,str10(不是实际的字符串名称)。 我是否必须对所有10个字符串执行dest.writeString(str_n)还是有更简单的方法来做到这一点? 我将如何读回它们?
例:
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(str1);
dest.writeString(str2);
dest.writeString(str3);
dest.writeString(str4);
dest.writeString(str5);
dest.writeString(str6);
dest.writeString(str7);
dest.writeString(str8);
dest.writeString(str9);
dest.writeString(str10);
}
如您所见,这可能会变得很冗长。 任何建议都会有所帮助! 谢谢!
如果您的Parcelable
类中有10个字符串,并且想要恢复它们的值,那么这就是这样做的方法。 通过创建一个Parcelable.Creator
和一个接受Parcel对象作为其参数的私有构造函数将它们读回,然后在该构造函数中以与调用writeString()
相同的顺序在Parcel上调用readString()
writeString()
。 参见http://developer.android.com/reference/android/os/Parcelable.html
它看起来像这样:
public class MyParcelable implements Parcelable {
private String str1;
private String str2;
private String str3;
private String str4;
private String str5;
private String str6;
private String str7;
private String str8;
private String str9;
private String str10;
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(str1);
dest.writeString(str2);
dest.writeString(str3);
dest.writeString(str4);
dest.writeString(str5);
dest.writeString(str6);
dest.writeString(str7);
dest.writeString(str8);
dest.writeString(str9);
dest.writeString(str10);
}
public static final Parcelable.Creator<MyParcelable> CREATOR
= new Parcelable.Creator<MyParcelable>() {
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
}
public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
};
private MyParcelable(Parcel in) {
str1 = in.readString();
str2 = in.readString();
str3 = in.readString();
str4 = in.readString();
str5 = in.readString();
str6 = in.readString();
str7 = in.readString();
str8 = in.readString();
str9 = in.readString();
str10 = in.readString();
}
}
为了编写它们,您可以按照建议的方式编写字符串数组。 读回它们,但是,您仍然必须将它们一一分配。
您可以编写一些实用程序方法:
public static void writeStrings(Parcel out, String... strings) {
out.writeInt(strings.length);
for (String string : strings) {
out.writeString(string);
}
}
public static String[] readStrings(Parcel in) {
final String[] strings = new String[in.readInt()];
for (int i = 0; i < strings.length; i++) {
strings[i] = in.readString();
}
return strings;
}
然后写它们:
writeStrings(dest, str1, str2, str3, str4, str5);
并阅读它们:
String[] strings = readStrings(dest);
str1 = strings[0];
str2 = strings[1];
str3 = strings[2];
str4 = strings[3];
str5 = strings[4];
老实说,仅出于可维护性和可读性考虑,我建议不要在这里做任何太聪明的事情,而要一一写出来。 可打包是一种很好的机制。 不幸的是,在这种情况下,您几乎无能为力。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.