2

Если добавить пользовательский элемент в мой NavigationView меню, например, так:Набор данных к пунктам меню NavigationView

Menu menu = navigationView.getMenu(); 

MenuItem item = menu.add("Item 1"); 

Как я могу установить данные для элемента (например, объект), так что, когда он нажал/Я могу передать эти данные в действие, которое он открывает?

ответ

1

Вы не можете установить/добавить данные в пункты меню. Глядя на documentation из add() метода, можно видеть, что вы можете установить:

идентификатор_группы - INT: идентификатор группы, что этот пункт должен быть частью. Это можно использовать для определения групп элементов для изменения состояния партии. Обычно используйте NONE, если элемент не должен находиться в группе.

itemId - int: Уникальный идентификатор предмета. Используйте NONE, если вам не нужен уникальный идентификатор.

заказ - int: заказ на товар. Используйте NONE, если вам не нужен порядок. См. GetOrder().

title - CharSequence: текст для отображения элемента.

Поэтому:

Вам нужно установить itemId и обрабатывать конкретные задачи внутри onNavigationItemSelected()

@Override 
public boolean onNavigationItemSelected(MenuItem item) { 
    // Handle navigation view item clicks here. 

    int id = item.getItemId(); 

    if (id == R.id.id_of_menu_item_1) { 

     // handle intents and passing data 

    } else if (id == R.id.id_of_menu_item_2) { 

     // handle intents and passing data 

    } 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 
    return true; 
} 
+1

Да, но как я могу установить данные в ** пункте меню **, которые затем могу передать в действие при нажатии? Например, как я могу установить объект «Пользователь» в элементе, а затем, когда этот элемент выбран, отправить его в действие? В вашем примере я могу передавать данные только при выборе элемента. Мне нужно, чтобы иметь возможность прикреплять данные к элементу, а затем, когда выбрано, получить эти данные и передать их активности. – user7556225

+0

Вы не устанавливаете какие-либо данные в пункт меню, кроме своего идентификатора. Их можно щелкнуть. Когда это происходит, они вызывают метод onNavigationItemSelected(). Теперь вы определяете, какой элемент меню был нажат, прочитав id и обработав необходимые задачи. Например, создайте 'намерение' и передайте данные или выполните любые другие задачи, которые вы хотите – Marat

+0

Что делать, если многие из моих пунктов меню открывают одно и то же действие, но вам нужно передать разные данные (объекты в этом случае)? – user7556225

0

Это не имеет смысла для меня. Класс MenuItem содержит только атрибуты относительно элемента меню. Вы не можете поместить другие объекты в экземпляр MenuItem. Посмотрите о MenuItem класса:

MenuItem class

Вы можете использовать хранилище шаблон, чтобы получить необходимые данные о новой деятельности или объекта нагрузки на текущей деятельности и перейти к новой деятельности с помощью намерения, просто создать Bundle и положить ваши сериализации или посыльного объекта. Вы можете сделать это, когда вы обрабатываете onNavigationItemSelected(MenuItem item)

Смежные вопросы