今天SZ突然问我传递Parcelable的实现类时,如果类成员变量中有一个类如何传递。。
写了很多继承Parcelable的类,这个问题还真没想过,第一反应就是该类也必须继承Parcelable
果然在Parcel类中找到
@SuppressWarnings("unchecked") public final <T extends Parcelable> T readParcelable(ClassLoader loader) { Parcelable.Creator<?> creator = readParcelableCreator(loader); if (creator == null) { return null; } if (creator instanceof Parcelable.ClassLoaderCreator<?>) { Parcelable.ClassLoaderCreator<?> classLoaderCreator = (Parcelable.ClassLoaderCreator<?>) creator; return (T) classLoaderCreator.createFromParcel(this, loader); } return (T) creator.createFromParcel(this); }方法。
所以代码自然就出来了
protected TestBean1(Parcel in) { mIndex = in.readInt(); mTitle = in.readString(); mTestBean2 = (TestBean2) in.readParcelable(getClass().getClassLoader()); }。
。
。
@Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(mIndex); dest.writeString(mTitle); dest.writeParcelable(mTestBean2,flags); }
TestBean2也是继承了Parcelable的类,代码是这样的。那原理呢 这涉及到Android IPC通信机制,稍后再说