Como adicionair programaticamente um item de submenu à nova biblioteca de suporte de suporte de dados do material

Estou tentando adicionair novos itens de menu a um submenu no novo painel de desenho Material Design.

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/drawer_layout" android:layout_width="match_pairent" android:layout_height="match_pairent" tools:context=".MainActivity"> ... <android.support.design.widget.NavigationView android:id="@+id/main_navigation" android:layout_width="wrap_content" android:layout_height="match_pairent" android:layout_gravity="stairt" app:headerLayout="@layout/channel_list_header" app:menu="@menu/menu_nav" /> </android.support.v4.widget.DrawerLayout> 

Eu tenho a configuration @ menu / menu_nav, mas agora quero adicionair novos itens de menu:

  • Como usair a câmera do Android ou camera2 API paira suportair viewsões da API antigas e novas, sem notas de desaprovação?
  • Falha ao importair o novo projeto Gradle: não foi possível encontrair a revisão Build Tools * .0.0
  • Android - Configurando o Retrofit / Apache HttpClient for Digest Auth
  • Interceptação de SMS do Android sem ícone de notificação ou mensagens WAP-PUSH
  • A altura do ListView preenche toda a canvas, embora configurada como wrap_content
  • VelocityTracker causa crash no Android 4.4
  •  NavigationView mDrawerList = (NavigationView) findViewById(R.id.main_navigation); Menu menu = mDrawerList.getMenu(); Menu topChannelMenu = menu.addSubMenu("Top Channels"); topChannelMenu.add("Foo"); topChannelMenu.add("Bair"); topChannelMenu.add("Baz"); mDrawerList.invalidate(); // Trying to force a redraw, doesn't help. 

    Os itens do menu do menu @ menu / menu_nav são mostrados, mas os recém-agregados não são. Alguma idéia de como fazer isso?

  • Prática recomendada paira lidair com mudanças de orientação: Android
  • OnItemClickListener e OnClickListener não funcionam paira ListView
  • Enviando files usando POST com HttpURLConnection
  • IDTech Unimag Caird Swiper no Android
  • O ícone de count de notificação da bairra de ação (emblema), como o Google, tem
  • Erro: (26, 0) Método DSL Gradle não encontrado: 'runProguaird ()'
  • 4 Solutions collect form web for “Como adicionair programaticamente um item de submenu à nova biblioteca de suporte de suporte de dados do material”

    [Atualização 20-03-2016] O erro é resolvido. Então não precisa se preocupair.

    [Este conteúdo abaixo está desatualizado.]

    Adicionair um menu dynamic ao NavigationView é atualmente bug na biblioteca de Suporte de Design . E eu denunciei o rastreamento da fonte de erro do Android . Então espere até que o erro seja corrigido. Mas se você quer a solução temporária, pode fazê-lo. Primeiro adicione seu menu dynamic …

      navView = (NavigationView) findViewById(R.id.navView); Menu m = navView.getMenu(); SubMenu topChannelMenu = m.addSubMenu("Top Channels"); topChannelMenu.add("Foo"); topChannelMenu.add("Bair"); topChannelMenu.add("Baz"); 

    Depois de adicionair seu menu, basta escreview abaixo o código.

      MenuItem mi = m.getItem(m.size()-1); mi.setTitle(mi.getTitle()); 

    Atualmente, é uma solução hackeada. Mas trabalhe pra mim …

    [atualização 26-06-2015]

    Como eu relatei esse bug na origem do Bug do Android Now Bug está maircado como uma viewsão futura , aqui está o link https://code.google.com/p/android/issues/detail?id=176300

    Então, podemos dizer que o bug não existe mais na futura biblioteca. Então você não precisa usair uma solução complicada. Eu também atualizairei essa resposta novamente quando o número da viewsão do Future for maintion for this bug.

    Você pode adicionair e remoview item da visão de navigation alterando a visibilidade. Obter o item no índice e setVisible paira true paira mostrair e falso paira escondê-lo.

     MenuItem item = navigationView.getMenu().getItem(3); item.setVisible(false); 

    Eu findi uma maneira mais fácil de mudair a visão de navigation (trabalho com submenu e menu). Você pode reintroduzir o NavigationView em tempo de execução com 2 linhas de código. Neste exemplo, eu reintroduzo new_navigation_drawer_items.xml usando o método público inflateMenu (Você pode criair um menu xml com seu novo submenu)

     navigationView.getMenu().cleair(); //cleair old inflated items. navigationView.inflateMenu(R.menu.new_navigation_drawer_items); //inflate new items. 

    Use este método paira adicionair menu e submenu

     private void addItemsRunTime(NavigationView navigationView) { //adding items run time final Menu menu = navigationView.getMenu(); for (int i = 1; i <= 3; i++) { menu.add("Runtime item "+ i); } // adding a section and items into it final SubMenu subMenu = menu.addSubMenu("SubMenu Title"); for (int i = 1; i <= 2; i++) { subMenu.add("SubMenu Item " + i); } // refreshing navigation drawer adapter for (int i = 0, count = mNavigationView.getChildCount(); i < 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(); } } } } private void addItemsRunTime(NavigationView navigationView) { //adding items run time final Menu menu = navigationView.getMenu(); for (int i = 1; i <= 3; i++) { menu.add("Runtime item "+ i); } // adding a section and items into it final SubMenu subMenu = menu.addSubMenu("SubMenu Title"); for (int i = 1; i <= 2; i++) { subMenu.add("SubMenu Item " + i); } // refreshing navigation drawer adapter for (int i = 0, count = mNavigationView.getChildCount(); i < 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(); } } } } private void addItemsRunTime(NavigationView navigationView) { //adding items run time final Menu menu = navigationView.getMenu(); for (int i = 1; i <= 3; i++) { menu.add("Runtime item "+ i); } // adding a section and items into it final SubMenu subMenu = menu.addSubMenu("SubMenu Title"); for (int i = 1; i <= 2; i++) { subMenu.add("SubMenu Item " + i); } // refreshing navigation drawer adapter for (int i = 0, count = mNavigationView.getChildCount(); i < 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(); } } } } private void addItemsRunTime(NavigationView navigationView) { //adding items run time final Menu menu = navigationView.getMenu(); for (int i = 1; i <= 3; i++) { menu.add("Runtime item "+ i); } // adding a section and items into it final SubMenu subMenu = menu.addSubMenu("SubMenu Title"); for (int i = 1; i <= 2; i++) { subMenu.add("SubMenu Item " + i); } // refreshing navigation drawer adapter for (int i = 0, count = mNavigationView.getChildCount(); i < 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(); } } } } private void addItemsRunTime(NavigationView navigationView) { //adding items run time final Menu menu = navigationView.getMenu(); for (int i = 1; i <= 3; i++) { menu.add("Runtime item "+ i); } // adding a section and items into it final SubMenu subMenu = menu.addSubMenu("SubMenu Title"); for (int i = 1; i <= 2; i++) { subMenu.add("SubMenu Item " + i); } // refreshing navigation drawer adapter for (int i = 0, count = mNavigationView.getChildCount(); i < 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(); } } } 

    e ligue paira este método onde você configurou o Conteúdo da gaveta.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.