Make usage of BundleSavedState more robust

This commit is contained in:
2017-05-30 09:05:05 -04:00
parent e844390614
commit 34ca9d17a2
3 changed files with 28 additions and 13 deletions

View File

@@ -20,16 +20,19 @@
package org.isoron.uhabits.activities.common.views;
import android.os.*;
import android.support.v4.os.*;
public class BundleSavedState extends android.support.v4.view.AbsSavedState
{
public static final Parcelable.Creator<BundleSavedState> CREATOR =
new Parcelable.Creator<BundleSavedState>()
ParcelableCompat.newCreator(
new ParcelableCompatCreatorCallbacks<BundleSavedState>()
{
@Override
public BundleSavedState createFromParcel(Parcel source)
public BundleSavedState createFromParcel(Parcel source,
ClassLoader loader)
{
return new BundleSavedState(source, getClass().getClassLoader());
return new BundleSavedState(source, loader);
}
@Override
@@ -37,7 +40,7 @@ public class BundleSavedState extends android.support.v4.view.AbsSavedState
{
return new BundleSavedState[size];
}
};
});
public final Bundle bundle;
@@ -50,7 +53,7 @@ public class BundleSavedState extends android.support.v4.view.AbsSavedState
public BundleSavedState(Parcel source, ClassLoader loader)
{
super(source, loader);
this.bundle = source.readBundle(getClass().getClassLoader());
this.bundle = source.readBundle(loader);
}
@Override

View File

@@ -107,6 +107,12 @@ public abstract class ScrollableChart extends View
@Override
public void onRestoreInstanceState(Parcelable state)
{
if(!(state instanceof BundleSavedState))
{
super.onRestoreInstanceState(state);
return;
}
BundleSavedState bss = (BundleSavedState) state;
int x = bss.bundle.getInt("x");
int y = bss.bundle.getInt("y");

View File

@@ -153,6 +153,12 @@ public class HabitCardListView extends RecyclerView
@Override
protected void onRestoreInstanceState(Parcelable state)
{
if(!(state instanceof BundleSavedState))
{
super.onRestoreInstanceState(state);
return;
}
BundleSavedState bss = (BundleSavedState) state;
dataOffset = bss.bundle.getInt("dataOffset");
super.onRestoreInstanceState(bss.getSuperState());