diff --git a/bottom-navigation/src/main/java/it/sephiroth/android/library/bottomnavigation/BottomNavigation.java b/bottom-navigation/src/main/java/it/sephiroth/android/library/bottomnavigation/BottomNavigation.java index 49dbc13..727ccce 100644 --- a/bottom-navigation/src/main/java/it/sephiroth/android/library/bottomnavigation/BottomNavigation.java +++ b/bottom-navigation/src/main/java/it/sephiroth/android/library/bottomnavigation/BottomNavigation.java @@ -51,7 +51,10 @@ import java.lang.ref.SoftReference; import java.lang.reflect.Constructor; +import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; +import java.util.List; import java.util.Map; import it.sephiroth.android.library.bottonnavigation.R; @@ -225,9 +228,18 @@ protected Parcelable onSaveInstanceState() { if (null == menu) { savedState.selectedIndex = 0; + savedState.disabledIndices = Collections.emptyList(); } else { // savedState.selectedIndex = Math.max(0, Math.min(getSelectedIndex(), menu.getItemsCount() - 1)); savedState.selectedIndex = getSelectedIndex(); + + savedState.disabledIndices = new ArrayList<>(); + + for (int i = 0; i < menu.getItems().length; i++) { + if (!menu.getItems()[i].isEnabled()) { + savedState.disabledIndices.add(i); + } + } } if (null != badgeProvider) { @@ -249,6 +261,14 @@ protected void onRestoreInstanceState(final Parcelable state) { if (null != badgeProvider && null != savedState.badgeBundle) { badgeProvider.restore(savedState.badgeBundle); } + + if (null != pendingMenu) { + for (int i = 0; i < pendingMenu.getItems().length; i++) { + if (savedState.disabledIndices.contains(i)) { + pendingMenu.getItems()[i].setEnabled(false); + } + } + } } public BadgeProvider getBadgeProvider() { @@ -862,11 +882,14 @@ public interface OnMenuChangedListener { static class SavedState extends BaseSavedState { int selectedIndex; Bundle badgeBundle; + List disabledIndices; public SavedState(Parcel in) { super(in); selectedIndex = in.readInt(); badgeBundle = in.readBundle(); + disabledIndices = new ArrayList<>(); + in.readList(disabledIndices, SavedState.class.getClassLoader()); } public SavedState(final Parcelable superState) { @@ -878,6 +901,7 @@ public void writeToParcel(final Parcel out, final int flags) { super.writeToParcel(out, flags); out.writeInt(selectedIndex); out.writeBundle(badgeBundle); + out.writeList(disabledIndices); } @Override diff --git a/build.gradle b/build.gradle index c039997..18d031e 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.0-beta2' + classpath 'com.android.tools.build:gradle:2.3.0-rc1' classpath 'com.dicedmelon.gradle:jacoco-android:0.1.1' // NOTE: Do not place your application dependencies here; they belong