gru*_*unk 397 android parcelable
我正在尝试制作一个ArrayList Parcelable自定义对象列表的活动.我开始编写一个myObjectList扩展ArrayList<myObject>和实现的类Parcelable.
某些属性MyObject是boolean但Parcel没有任何方法read/writeBoolean.
处理这个问题的最佳方法是什么?
b_y*_*yng 929
这是我怎么做的......
writeToParcel:
dest.writeByte((byte) (myBoolean ? 1 : 0)); //if myBoolean == true, byte == 1
Run Code Online (Sandbox Code Playgroud)
readFromParcel:
myBoolean = in.readByte() != 0; //myBoolean == true if byte != 0
Run Code Online (Sandbox Code Playgroud)
Tai*_*aig 65
您还可以使用writeValue方法.在我看来,这是最直接的解决方案.
dst.writeValue( myBool );
Run Code Online (Sandbox Code Playgroud)
之后,您可以使用简单的强制转换轻松检索它Boolean:
boolean myBool = (Boolean) source.readValue( null );
Run Code Online (Sandbox Code Playgroud)
在幕后,Android Framework将它作为整数处理:
writeInt( (Boolean) v ? 1 : 0 );
Run Code Online (Sandbox Code Playgroud)
Sha*_*aaz 15
你是这样声明的
private boolean isSelectionRight;
Run Code Online (Sandbox Code Playgroud)
写
out.writeInt(isSelectionRight ? 1 : 0);
Run Code Online (Sandbox Code Playgroud)
读
isSelectionRight = (in.readInt() == 0) ? false : true;
Run Code Online (Sandbox Code Playgroud)
布尔类型需要转换为Parcel支持的东西,因此我们可以将其转换为int.
Hen*_*ijn 12
AndroidStudio(使用2.3个大气压),在你的类上实现Parcelable后,你可以简单地将鼠标指针放在你的类名上,它会要求你添加parcelable实现:
从这四个字段中,它生成以下内容:
public class YourClass implements Parcelable{
String someString;
int someInt;
boolean someBoolean;
List<String> someList;
protected YourClass(Parcel in) {
someString = in.readString();
someInt = in.readInt();
someBoolean = in.readByte() != 0;
someList = in.createStringArrayList();
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(someString);
dest.writeInt(someInt);
dest.writeByte((byte) (someBoolean ? 1 : 0));
dest.writeStringList(someList);
}
...
Run Code Online (Sandbox Code Playgroud)
我通常让他们在一个数组和呼叫writeBooleanArray和readBooleanArray
如果它是一个需要打包的布尔值,你可以这样做:
parcel.writeBooleanArray(new boolean[] {myBool});
Run Code Online (Sandbox Code Playgroud)
小智 8
out.writeInt(mBool ? 1 : 0); //Write
this.mBool =in.readInt()==1; //Read
Run Code Online (Sandbox Code Playgroud)
如果您使用的是Android Studio,我建议您使用Parcelable实现最简单的方法.
只需转到文件 - >设置 - >插件 - >浏览存储库,然后搜索parcelable.查看图像
还有一个网站也是这样做的.http://www.parcelabler.com/
Kotlin 中的简短实现,支持可空:
向 Parcel 添加方法
fun Parcel.writeBoolean(flag: Boolean?) {
when(flag) {
true -> writeInt(1)
false -> writeInt(0)
else -> writeInt(-1)
}
}
fun Parcel.readBoolean(): Boolean? {
return when(readInt()) {
1 -> true
0 -> false
else -> null
}
}
Run Code Online (Sandbox Code Playgroud)
并使用它:
parcel.writeBoolean(isUserActive)
parcel.readBoolean() // For true, false, null
parcel.readBoolean()!! // For only true and false
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
95355 次 |
| 最近记录: |