android - How to add submenu items to NavigationView programmatically instead of menu xml -
i'm trying add submenu
items navigationview
programmatically . i'm able add items menu
not submenu
adding items menu works
menu menu = mnavigationview.getmenu(); menu.add(menu.none, menu.none, index, "menu item1");
but adding items sub menu doesn't work
menu menu = mnavigationview.getmenu(); submenu submenu = menu.addsubmenu("sub menu title"); submenu.add(menu.none, menu.none, index, "submenu item1");
the trick call baseadapter.notifydatasetchanged
on underlying adapter
contains menu items. use reflection grab listview
or loop on navigationview
children until reach it.
this isn't up-to-date code, fas know google hasn't pushed recent changes support library, navigationmenupresenter.preparemenuitems
called when call baseadpater.notifydatasetchanged
.
but if want see recent source, can download through sdk manager. choose sources android mnc. navigate to
yourandroidsdk/sources/android-mnc/android/support/design/internal/navigationmenupresenter.java
@override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); ... final menu menu = mnavigationview.getmenu(); (int = 0; < 4; i++) { menu.add("menu item " + (i + 1)); } final submenu submenu = menu.addsubmenu("submenu title"); (int = 0; < 2; i++) { submenu.add("submenu item " + (i + 1)); } (int = 0, count = mnavigationview.getchildcount(); < count; i++) { final view child = mnavigationview.getchildat(i); if (child != null && child instanceof listview) { final listview menuview = (listview) child; final headerviewlistadapter adapter = (headerviewlistadapter) menuview.getadapter(); final baseadapter wrapped = (baseadapter) adapter.getwrappedadapter(); wrapped.notifydatasetchanged(); } } }
results
Comments
Post a Comment