Получить OBJECT из навигации View (ящик) динамически Android / Java - PullRequest
0 голосов
/ 24 мая 2018

В очередной раз застряв в моих треках кодирования, я пришел за знаниями от всезнающего сообщества StackOverflow ... Моя проблема довольно проста.Я заполнил ящик навигационного представления объектами.Эти объекты toString () методы были перезаписаны для отображения каждого имени объекта в списке.При щелчке по каждому объекту в списке ящиков появляется сообщение с предупреждением («вы нажали» + myDrawerObject.getName ()). Проблема в приемнике onNavigationItemSelected.Этот метод возвращает элемент MenuItem, который является представлением.У меня проблемы с пониманием, почему я не могу рассматривать это представление как объект, который он должен содержать.Помощь очень ценится и спасибо заранее!

Я понимаю, что параметр элемента возвращает, какой пункт меню был нажат, но если этот элемент меню является объектом, почему я не могу вызвать эти объекты методами?Я попытался получить возвращаемое значение элемента и вызвать его метод getName (), но безрезультатно.item.getName ();(Я понимаю, что элемент является представлением, поэтому у него нет метода "getName ()"

Я попытался преобразовать значение элемента обратно в объект безрезультатно MyObject myObject = (MyObject) item; // Itemвсе еще является представлением, и представление не может быть преобразовано в объект, кажется

Я даже пытался поместить все созданные объекты типа MyObject в статический arrayList, а затем пытаться сопоставить идентификаторы также безрезультатно. //в слушателе onNavigationItemSelected int id = item.getItemId ()

//somewhere else in the code
 for (anotherMyObject : listOfEveryMyObjectEverMade){
 anotherMyObject.get(id)
 }
/*returns the id of the item in the listview. as i understand a specific id 
is assigned to every item in the list. so if an object has never been in that 
particular list, it wont have that same id
*/

Я должен добавить содержимое ящика (список строк), созданного динамически, чтобы не было XML-файла для меню или menItems!

1 Ответ

0 голосов
/ 31 августа 2018

Я столкнулся с очень похожей ситуацией и буквально блокировал меня на несколько дней!

Я почти на 90% уверен, что должен быть выход ...

но ялично я не нашел его, поэтому вместо этого я обошел вокруг:

private void setMenus() {
    int temp = 0;
  //Mine was inside of a fragment, hints the getActivity() call
    NavigationView navView22 = getActivity().findViewById(R.id.navigation_view);
    MenuItem oneItem = navView22.getMenu().findItem(0);
        if (oneItem == null){
        Menu m = navView22.getMenu();
        SubMenu sm0 = m.addSubMenu(
                getResources().getString(R.string.clickToSelectRookies));
        sm0.add(0,
                temp, temp, getResources().getString(R.string.signAllString));
            tempRooks.add(round1.get(0));
  /*I had to create the entire menu dynamically, so I did so by creating 
  subMenus in my menus in numerical order
  I then created an arraylist to hold all my objects in that same order
  though in retrospect I should have just used a HashMap!!
  finally in the onClick I was able to listen for which subMenu item was clicked
   and since the menu's and my arraylist of objects corresponded I then pulled 
  the correct object from my arraylist. I realize this is a little hacky, but 
  hopefully if you do not find the answer you can do this temporarily.
  If you do find a better solution please post so we all can learn. Thank YOU!!

* / temp ++;

        SubMenu sm1 = m.addSubMenu(
                getResources().getString(R.string.firstRoundPicks));
        for (int x = 0; x < round1.size(); x++) {
            sm1.add(0, temp, temp, round1.get(x).toString());
                tempRooks.add(round1.get(x));
            temp++;
        }
...