0

У меня есть NavigationDrawer, разделенный на два раздела. Сначала содержит пункты меню с идентификаторами, такими как «назад», «выход» и т. Д. Он создается с использованием xml-файла. Второй создается динамически, поэтому я не могу определить какой-либо идентификатор или что-то еще. И поскольку это объект типа меню, я не могу найти способ написать правильный прослушиватель для элементов из второго раздела. Например: если я нажимаю элемент 1 из раздела 2, начинается действие 1 и т. Д. Любые идеи? Фрагмент моего кода:NavigationDrawer Menu Элемент, выбранный положением

Создания второго раздела моего NavigationDrawer «меню

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     Toast.makeText(this, "onActivityResult", Toast.LENGTH_LONG).show(); 
     super.onActivityResult(requestCode, resultCode, data); 

     if (requestCode == 1) { 
      if(resultCode == RESULT_OK){ 

       arrayFav.clear(); 
       arrayLin.clear(); 
       ArrayList<String> passedText = data.getStringArrayListExtra("text"); 
       ArrayList<String> passedLink = data.getStringArrayListExtra("link"); 

       arrayFav.addAll(passedText); 
       arrayLin.addAll(passedLink); 

       NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
       Menu mainMenu = navigationView.getMenu(); 

       final Menu menuWithFavJobs = mainMenu.addSubMenu(Fav jobs: "+mEditTextPraca.getText().toString()); 

       for (int i = 0; i < arrayFav.size(); i++) { 
        menuWithFavJobs.add(arrayFav.get(i)); 
       } 
      } 
     } 
    } 

и ту части, где я использовал первую» секцию идентификаторов, чтобы сделать какое-то действие:

public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     int id = item.getItemId(); 

     if (id == R.id.nav_back) {} 
     else if (id == R.id.nav_export) { 
      onExportPressed(); 
     } 
     else if (id == R.id.nav_exit) { 
      onExitPressed(); 
     } 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 
    } 

Я пробовал:

menuWithFavJobs.getItem(i).setOnMenuItemClickListener()... 

но он работает только для меню с одним товаром :( Ple ase для любых намеков! :) Я должен решить это.

ответ

0

В вашей петле for, которая добавляет элементы в подменю. Вам нужно сохранить возвращаемое значение menuWithFavJobs.add(). Он возвращает объект MenuItem. Тогда вы можете позвонить:

MenuItem.setOnMenuItemClickListener() 

Просто создал это и попробовал:

Menu mainMenu = navigationView.getMenu(); 
mainMenu.add("Test OUTER"); 
Menu subMenu = mainMenu.addSubMenu("SubMenu"); 

for (int i = 0; i < 5; i++) { 
    MenuItem item = subMenu.add("Submenu Item " + i); 

    final int count = i; 
    item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 
     @Override 
     public boolean onMenuItemClick(MenuItem item) { 
      Toast.makeText(MainActivity.this, "THIS IS A TEST" + count, Toast.LENGTH_SHORT).show(); 
      return false; 
     } 
    }); 
} 

Проверено, работает хорошо. Проблема должна возникнуть где-то еще в вашем коде?

+0

Да! Решение было действительно просто. Но это доказывает, что кодирование - не самая лучшая идея в середине ночи :) Спасибо! –