एक बेहतर तरीका यह है कि परछाई से बचा जाता है हो सकता है संभाल करने के लिए बस इस तरह लक्ष्य प्रकार में स्थिर निर्माता कॉल करने के लिए:
this.amazingObject = AmazingObject.CREATOR.createFromParcel(in);
और this.amazingObject.writeToParcel(Parcel, int)
आंतरिक रूप से, का उपयोग करते समय Parcelable
को यह लिखना readParcelable(ClassLoader)
बुला होता है:
public final <T extends Parcelable> T readParcelable(ClassLoader loader) {
Parcelable.Creator<T> creator = readParcelableCreator(loader);
if (creator == null) {
return null;
}
if (creator instanceof Parcelable.ClassLoaderCreator<?>) {
return ((Parcelable.ClassLoaderCreator<T>)creator).createFromParcel(this, loader);
}
return creator.createFromParcel(this);
}
आपको लगता है कि विधि का आखिरी कॉल देख सकते हैं j है ust सही Creator
पर कॉल कर रहा है लेकिन readParcelableCreator
के अंदर एक बहुत सारे प्रतिबिंब है कि हम इसे सीधे कॉल करके बच सकते हैं।
यह उपयोगिता कॉल उपयोगी हो सकता है:
import android.os.Parcel;
import android.os.Parcelable;
public class Parcels {
public static void writeBoolean(Parcel dest, Boolean value) {
dest.writeByte((byte) (value != null && value ? 1 : 0));
}
public static Boolean readBoolean(Parcel in){
return in.readByte() != 0;
}
public static void writeParcelable(Parcel dest, int flags, Parcelable parcelable) {
writeBoolean(dest, parcelable == null);
if (parcelable != null) {
parcelable.writeToParcel(dest, flags);
}
}
public static <T extends Parcelable> T readParcelable(Parcel in, Parcelable.Creator<T> creator) {
boolean isNull = readBoolean(in);
return isNull ? null : creator.createFromParcel(in);
}
}
'बी के अंदर एक object' कहां है? – iTurki