2016-08-17 2 views
1

Я разрабатываю приложение, используя официальный андроид NavigationDrawer, то navDrawer имеет свое собственное меню XML под названием activity_main_drawer.xml на рисунке:Пользовательский адаптер меню для navDrawer?

activity_main_drawer screenshot

Это он в приложении:

app screenshot

Теперь я хочу изменить названия и значки для каждой строки динамически (JSON), я знаю, как создать пользовательский адаптер ListView, но я не мог знать, как создать пользовательский адаптер меню для этого navDrawer. Это не ListView, это меню и группы и элементы.

Любая помощь очень ценится.

+0

Возможный дубликат [Как создать пользовательский навигационный ящик в android] (http://stackoverflow.com/questions/21796209/how-to-create-a-custom-navigation-drawer-in-android) – random

ответ

1

Вы должны добавить пункты меню динамически, как показано ниже:

Menu menu = nvDrawer.getMenu(); 
     for (MenuItem mi : menu.values()) { 
      if (menu.size() == 0) { 
       menu.add(mi.getId() + ""); 
      } 
      if (menu.getItem(mi.getId()) == null) { 
       menu.add(mi.getId() + ""); 
      } 
      MenuItem mi = menu.getItem(mi.getId()); 
      mi.setIcon(mi.getIcon()); 
      mi.setTitle(mi.getTittle()); 
     } 
+0

Что 'KSMenuItem'? –

+0

@FadiObaji well KSMenuItem - это POJO с данными меню. Вы можете просто использовать MenuItem. –

+0

Я получаю не могу разрешить метод для 'menus' и' values ​​() ' help please –

0

U можно добавить ListView или Recycler Просмотр в виде навигации ящик только у требуется XML-тегов на ваш взгляд, является

android:layout_gravity="start" // This is indicates your navigation drawer 

после что ваш макет должен быть как ниже (вы можете заменить Recyclerview на Listview) RelativeLayout rl_drawer_nav_bar будет работать как ящик для навигации. После этого вы не требуется встроенное при условии NavigationDrawer View

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/drawer_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fitsSystemWindows="true" 
tools:openDrawer="start"> 

<LinearLayout 
    android:id="@+id/content_frame" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <include layout="@layout/toolbar" /> 

</LinearLayout> 

<RelativeLayout 
    android:id="@+id/rl_drawer_nav_bar" 
    android:layout_width="280dp" 
    android:layout_height="match_parent" 
    android:layout_gravity="start"> 

    <RelativeLayout 
     android:id="@+id/rl_drawer_main_header_title_bar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="5dp"> 

     <ImageView 
      android:id="@+id/iv_drawer_user_image" 
      android:layout_width="110dp" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" 
      android:layout_alignParentTop="true" 
      android:contentDescription="@string/app_name" 
      android:src="@drawable/menu_logo" /> 

     <TextView 
      android:id="@+id/tv_drawer_name" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentEnd="true" 
      android:layout_alignParentRight="true" 
      android:layout_centerVertical="true" /> 


    </RelativeLayout> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/rv_drawer_menu_list" 
     android:layout_width="280dp" 
     android:layout_height="match_parent" 
     android:layout_below="@+id/rl_drawer_main_header_title_bar" 
     android:layout_gravity="start" 
     android:choiceMode="singleChoice" /> 

</RelativeLayout> 
</android.support.v4.widget.DrawerLayout> 

После вашего ответа API Парс JSON к списку YourMenuModel и

YourCustomAdapter adapter = new YourCustomAdapter(yourMenuModelList) 

Всякий раз, когда меню изменения списка или обновление или вы добавляете новое меню, просто вызов adapter.notifyDataSetChanged().

+0

Я знаю, что могу это сделать, но я специально упомянул, что хочу сохранить элементы меню и изменить его динамически, он выглядит лучше, чем listview –

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