我有一个带有 View 成员的对象。所以我想传递这个对象的 ArrayList,我需要传递这个视图。我知道如何实现包裹。
代码是这样的:
public class Variable implements Parcelable {
public View mView;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeValue(mView)
}
public static final Parcelable.Creator<Variable> CREATOR
= new Parcelable.Creator<Variable>() {
public Variable createFromParcel(Parcel in) {
return new Variable(in);
}
public Variable[] newArray(int size) {
return new Variable[size];
}
};
private Variable(Parcel in) {
mView= (View) in.readValue(getClass().getClassLoader());
}
所以我尝试了 writeToParcel 和 Variable(Parcel in( 方法的对象方法,但显然它不起作用。
我应该怎么做?
您应该只为数据对象实现parcelable
,而不应该为视图实现,其想法是parcel/unparcel
数据状态以使用状态重新实例化给定View
。
您还应该注意,当您打包数据并通过 Intent 发送数据时,事务可以容纳的缓冲区大小有一个硬性限制。因此,理想情况下避免通过包裹传输大型内存中对象(一个不好的例子是Bitmaps
此外,手动实现可包裹非常乏味,并且可能容易出错。我建议使用 Studio 的插件或任何好的第三方插件来实现Parcelable
。
希望对你有帮助