Android: прагматично добавить элемент меню в NavigationView из веб-службы

В NavigationView моего приложения есть несколько меню, но я хотел, чтобы пользователь получал доступ только к определенным меню. В соответствии с привилегиями пользователя пользователь сможет просматривать только доступные ему меню. Поэтому я создал веб-сервис, который возвращает мне список меню.

Вот вывод json доступа к меню

[
  {
    "id": "1",
    "appId": "1",
    "userId": "1",
    "name": "Design List",
    "icon": "http://some_website/Demo/images/menu/1.png",
    "code": "dsn001"
  },
  {
    "id": "2",
    "appId": "1",
    "userId": "1",
    "name": "Price List",
    "icon": "http://some_website/Demo/images/menu/2.png",
    "code": "prc002"
  },
  ....]

Например, пользователь имеет доступ только к этому меню. У меня есть готовый навигационный вид в приложении. Я хотел добавить это меню в меню навигации.

В Android я создал класс модели для меню

MenuItems.java

public class MenuItems {

    public String id;
    public String appId;
    public String userId;
    public String name;
    public String icon;
    public String code;
}

В ответе веб-службы я преобразовал ответ в ArrayList<MenuItems>(), вот код веб-службы.

ArrayList<MenuItems> menuItem = new ArrayList<MenuItems>();
.
.
MenuItems[] items = new Gson().fromJson(response, MenuItems[].class);
for (MenuItems m : items) {
    menuItem.add(m);
}

В основной деятельности я сделал этот код.

Menu menu = navigationView.getMenu();
    if (menuList != null) {
        for (MenuItems items : menuList) {
            MenuItem menuItem = menu.add(items.name);
            menuItem.setIcon(new BitmapDrawable(items.icon));
        }
    }

Но все же это не сработало.

Я хотел отобразить это меню со значком в навигационном представлении. мы можем показать значок, используя библиотеку Picaso? пожалуйста помоги.


person Ashish Kudale    schedule 16.12.2016    source источник
comment
Вы имели в виду добавление пунктов меню в NavigationDrawer вашего приложения?   -  person Hasif Seyd    schedule 16.12.2016
comment
Вам нужно сделать это.   -  person Eric B.    schedule 16.12.2016
comment
@HasifSeyd да. Я хочу добавить меню в NavigationDrawer.   -  person Ashish Kudale    schedule 16.12.2016
comment
@ЭрикБ. Спасибо, я думаю, это может сработать. Я стараюсь.   -  person Ashish Kudale    schedule 16.12.2016


Ответы (1)


Для динамического добавления элементов меню навигации вы должны получить объект меню из NavigationView во время выполнения, как показано ниже. также получить значки с сервера и сохранить их.

    Menu menu = navigationView.getMenu();

затем добавьте к нему список меню

    for (MenuItems item : items) {
        MenuItem lNavigationMenuItem = menu.add(groupId, itemId, order, title);
        //fetch the bitmap from the server asynchronously before and add it to the menu as follows 
        lNavigationMenuItem.setIcon(new BitmapDrawable(bitmap));
    }
person Hasif Seyd    schedule 16.12.2016
comment
но мой список не MenuItem типа. это MenuItems - person Ashish Kudale; 16.12.2016
comment
да что там сомневаться?? хорошо, используйте любой тип, который вы используете, я только что предоставил логику - person Hasif Seyd; 16.12.2016
comment
внутри цикла for MenuItem lNavigationitem из пакета android.view.MenuItem - person Hasif Seyd; 16.12.2016
comment
см. мой отредактированный вопрос. Я добавил вашу логику, но мои меню пусты. - person Ashish Kudale; 16.12.2016