navDrawer的自定义菜单适配器?

时间:2016-08-17 05:46:50

标签: android custom-adapter android-navigation-drawer

我正在使用官方的android NavigationDrawer开发一个应用程序,navDrawer在下图中有自己的名为activity_main_drawer.xml的菜单xml:

activity_main_drawer screenshot

这是在应用程序中:

app screenshot

现在我想动态更改每行的标题和图标(JSON),我知道如何制作自定义ListView适配器,但我不知道如何为这个navDrawer制作自定义菜单适配器。它不是ListView,它是一个菜单,有组和项目。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分: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());
        }

答案 1 :(得分:0)

您可以将ListView或Recycler View添加为导航抽屉 只是你在视图中需要一个xml标签

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

之后您的布局应如下所示(您可以使用Listview替换Recyclerview) 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解析为List YourMenuModel和

YourCustomAdapter adapter = new YourCustomAdapter(yourMenuModelList)

每当您的菜单列表更改或更新或添加新菜单时,只需致电 adapter.notifyDataSetChanged()。