@Override public boolean reload(ModelCache modelCache) { // First reload list object boolean result = super.reload(modelCache); // Then reload each item in list. Sometimes a ConcurrentModificationException occurs. // Changed implementation so that it doesn't use an Iterator any more. // Uglier but hopefully that will solve the issue. for (CO modelElement : list) { CachedModel listModel = modelElement; if (listModel.reload(modelCache)) { result = true; } } return result; }
/** @see com.github.droidfu.cachefu.CachedModel#writeToParcel(android.os.Parcel, int) */ @Override public void writeToParcel(Parcel dest, int flags) { super.writeToParcel(dest, flags); // Write class name to parcel before object, so can be loaded correctly back in dest.writeString(clazz.getCanonicalName()); dest.writeTypedList(list); }
/** @see com.github.droidfu.cachefu.CachedModel#readFromParcel(android.os.Parcel) */ @SuppressWarnings({"unchecked", "rawtypes"}) @Override public void readFromParcel(Parcel source) throws IOException { super.readFromParcel(source); // Read class from parcel, then load class and use creator to generate new object from data String className = source.readString(); try { clazz = (Class<? extends CachedModel>) Class.forName(className); list = source.createTypedArrayList((Creator) clazz.getField("CREATOR").get(this)); } catch (Exception e) { e.printStackTrace(); } }