Skip to content

Instantly share code, notes, and snippets.

@antslava
Last active May 13, 2016 05:22
Show Gist options
  • Save antslava/cea2f0297ba7add6ed4d to your computer and use it in GitHub Desktop.
Save antslava/cea2f0297ba7add6ed4d to your computer and use it in GitHub Desktop.
CheckedTextView doesn't save checked state after rotation. Below you can find solution.
/**
* Fix issue with checked state.
*
* Created by Antonenko Viacheslav on 16/11/15.
*/
public class FixedCheckedTextView extends AppCompatCheckedTextView {
public FixedCheckedTextView(Context context) {
super(context);
}
public FixedCheckedTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public FixedCheckedTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
static class SavedState extends BaseSavedState {
boolean checked;
public SavedState(Parcel source) {
super(source);
checked = source.readInt() == 1;
}
public SavedState(Parcelable superState) {
super(superState);
}
@Override
public void writeToParcel(Parcel out, int flags) {
super.writeToParcel(out, flags);
out.writeInt(checked ? 1 : 0);
}
@Override
public String toString() {
return "FixedCheckedTextView.SavedState{"
+ Integer.toHexString(System.identityHashCode(this))
+ " checked=" + checked + "}";
}
public static final Parcelable.Creator<SavedState> CREATOR = new Creator<SavedState>() {
@Override
public SavedState createFromParcel(Parcel source) {
return new SavedState(source);
}
@Override
public SavedState[] newArray(int size) {
return new SavedState[size];
}
};
}
@Override
public Parcelable onSaveInstanceState() {
Parcelable superState = super.onSaveInstanceState();
SavedState savedState = new SavedState(superState);
savedState.checked = isChecked();
return savedState;
}
@Override
public void onRestoreInstanceState(Parcelable state) {
SavedState savedState = ((SavedState) state);
super.onRestoreInstanceState(savedState.getSuperState());
setChecked(savedState.checked);
requestLayout();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment