Skip to content

Instantly share code, notes, and snippets.

@volodia-chornenkyy
Last active January 22, 2017 14:38
Show Gist options
  • Save volodia-chornenkyy/a51be4209bd84093a156c3ed4a27e7a0 to your computer and use it in GitHub Desktop.
Save volodia-chornenkyy/a51be4209bd84093a156c3ed4a27e7a0 to your computer and use it in GitHub Desktop.
BottomNavigationView which saves state after configuration change
public class StatedNavigationBottomBar extends BottomNavigationView {
public StatedNavigationBottomBar(Context context) {
super(context);
}
public StatedNavigationBottomBar(Context context, AttributeSet attrs) {
super(context, attrs);
}
public StatedNavigationBottomBar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public Parcelable onSaveInstanceState() {
Parcelable superState = super.onSaveInstanceState();
SavedState ss = new SavedState(superState);
ss.selectedMenuItemId = getSelectedItemId();
return ss;
}
@Override
public void onRestoreInstanceState(Parcelable state) {
SavedState ss = (SavedState) state;
super.onRestoreInstanceState(ss.getSuperState());
int selectedMenuItemId = ss.selectedMenuItemId;
restoreState(selectedMenuItemId);
}
private int getSelectedItemId() {
for (int i = 0; i < getMenu().size(); i++) {
MenuItem item = getMenu().getItem(i);
if (item.isChecked()) {
return item.getItemId();
}
}
return 0;
}
private void restoreState(int menuItemId) {
Menu menu = getMenu();
MenuItem menuItem = menu.findItem(menuItemId);
if (menuItem != null) {
menuItem.setChecked(true);
}
}
static class SavedState extends BaseSavedState {
public static final Parcelable.Creator<SavedState> CREATOR
= new Parcelable.Creator<SavedState>() {
public SavedState createFromParcel(Parcel in) {
return new SavedState(in);
}
public SavedState[] newArray(int size) {
return new SavedState[size];
}
};
int selectedMenuItemId;
SavedState(Parcelable superState) {
super(superState);
}
private SavedState(Parcel in) {
super(in);
selectedMenuItemId = in.readInt();
}
@Override
public void writeToParcel(Parcel out, int flags) {
super.writeToParcel(out, flags);
out.writeInt(selectedMenuItemId);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment