diff --git a/catalog/java/io/material/catalog/navigationdrawer/NavigationDrawerDemoActivity.java b/catalog/java/io/material/catalog/navigationdrawer/NavigationDrawerDemoActivity.java
index 29ba36aadb6..e1cb1e0626a 100644
--- a/catalog/java/io/material/catalog/navigationdrawer/NavigationDrawerDemoActivity.java
+++ b/catalog/java/io/material/catalog/navigationdrawer/NavigationDrawerDemoActivity.java
@@ -46,6 +46,7 @@ public void handleOnBackPressed() {
};
private DrawerLayout drawerLayout;
+ private MaterialSwitch autoCloseSwitch;
@NonNull
@Override
@@ -91,13 +92,13 @@ public void onDrawerClosed(@NonNull View drawerView) {
view.findViewById(R.id.show_end_drawer_gravity)
.setOnClickListener(v -> drawerLayout.openDrawer(navigationViewEnd));
- MaterialSwitch materialSwitch = view.findViewById(R.id.bold_text_switch);
- materialSwitch.setChecked(true);
- materialSwitch.setOnCheckedChangeListener(
+ MaterialSwitch boldTextSwitch = view.findViewById(R.id.bold_text_switch);
+ boldTextSwitch.setOnCheckedChangeListener(
(buttonView, isChecked) -> {
navigationViewStart.setItemTextAppearanceActiveBoldEnabled(isChecked);
navigationViewEnd.setItemTextAppearanceActiveBoldEnabled(isChecked);
});
+ autoCloseSwitch = view.findViewById(R.id.auto_close_switch);
drawerLayout.post(
() -> {
@@ -115,7 +116,9 @@ private void initNavigationView(NavigationView navigationView) {
navigationView.setNavigationItemSelectedListener(
menuItem -> {
navigationView.setCheckedItem(menuItem);
- drawerLayout.closeDrawer(navigationView);
+ if (autoCloseSwitch.isChecked()) {
+ drawerLayout.closeDrawer(navigationView);
+ }
return true;
});
}
diff --git a/catalog/java/io/material/catalog/navigationdrawer/res/layout/cat_navigationdrawer.xml b/catalog/java/io/material/catalog/navigationdrawer/res/layout/cat_navigationdrawer.xml
index 10575cf3355..728b677ce4d 100644
--- a/catalog/java/io/material/catalog/navigationdrawer/res/layout/cat_navigationdrawer.xml
+++ b/catalog/java/io/material/catalog/navigationdrawer/res/layout/cat_navigationdrawer.xml
@@ -80,6 +80,25 @@
android:id="@+id/bold_text_switch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:checked="true"
+ android:layout_marginStart="12dp" />
+
+
+
+
+
diff --git a/catalog/java/io/material/catalog/navigationdrawer/res/values/strings.xml b/catalog/java/io/material/catalog/navigationdrawer/res/values/strings.xml
index a3d5ff0a714..2fc687eb808 100644
--- a/catalog/java/io/material/catalog/navigationdrawer/res/values/strings.xml
+++ b/catalog/java/io/material/catalog/navigationdrawer/res/values/strings.xml
@@ -35,6 +35,7 @@
Open End Drawer
Bold active label
+ Close drawer on selection
Mail
Labels
Label
diff --git a/lib/java/com/google/android/material/internal/NavigationMenuItemView.java b/lib/java/com/google/android/material/internal/NavigationMenuItemView.java
index 55f098db1d0..d55377a76c1 100644
--- a/lib/java/com/google/android/material/internal/NavigationMenuItemView.java
+++ b/lib/java/com/google/android/material/internal/NavigationMenuItemView.java
@@ -34,6 +34,7 @@
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
+import android.view.ViewGroup;
import android.view.ViewStub;
import android.widget.CheckedTextView;
import android.widget.FrameLayout;
@@ -173,6 +174,10 @@ private void setActionView(@Nullable View actionView) {
(FrameLayout)
((ViewStub) findViewById(R.id.design_menu_item_action_area_stub)).inflate();
}
+ // Make sure to remove the existing parent if the View is reused
+ if (actionView.getParent() != null) {
+ ((ViewGroup) actionView.getParent()).removeView(actionView);
+ }
actionArea.removeAllViews();
actionArea.addView(actionView);
}
diff --git a/lib/java/com/google/android/material/internal/NavigationMenuPresenter.java b/lib/java/com/google/android/material/internal/NavigationMenuPresenter.java
index 8f4bd38c11b..84674a9ef28 100644
--- a/lib/java/com/google/android/material/internal/NavigationMenuPresenter.java
+++ b/lib/java/com/google/android/material/internal/NavigationMenuPresenter.java
@@ -105,6 +105,7 @@ public class NavigationMenuPresenter implements MenuPresenter {
/** Padding for separators between items */
int paddingSeparator;
+
private int overScrollMode = -1;
@Override
@@ -125,6 +126,9 @@ public MenuView getMenuView(ViewGroup root) {
new NavigationMenuViewAccessibilityDelegate(menuView));
if (adapter == null) {
adapter = new NavigationMenuAdapter();
+ // Prevent recreating all the Views when notifyDataSetChanged() is called causing issues
+ // with the a11y reader (see b/112931425)
+ adapter.setHasStableIds(true);
}
if (overScrollMode != -1) {
menuView.setOverScrollMode(overScrollMode);
@@ -375,7 +379,7 @@ public int getSubheaderInsetEnd() {
return this.subheaderInsetEnd;
}
- public void setSubheaderInsetEnd(@Px int subheaderInsetEnd) {
+ public void setSubheaderInsetEnd(@Px int subheaderInsetEnd) {
this.subheaderInsetEnd = subheaderInsetEnd;
updateMenuView(false);
}