如何从xml动态生成导航抽屉项目?

时间:2015-10-03 10:53:52

标签: android xamarin.android navigation-drawer navigationview

我准备了2个xml菜单文件并放在我的 res / menu 文件夹中。

如果用户未登录,将显示

menu_beforeLogin.xml 。 登录后,菜单项将更改为 menu_afterLogin.xml

我尝试在 onResume()方法中调用 InflateMenu(),但最终只要 onResume(),就会继续添加xml文件中的项目调用而不是删除/重新生成菜单列表。

我更愿意检查用户是否登录 onResume()方法。

  

动态更改导航抽屉列表的正确方法是什么   ?

MainActivity.cs

base.Process

布局/ main.axml

protected override void OnCreate(Bundle bundle)
{
    base.OnCreate(bundle);
    ...
    mDrawer = FindViewById<NavigationView>(Resource.Id.navigation_drawer);
    ...
}

protected override void OnResume ()
{
    base.OnResume ();
    string token = pref.GetString (Constant.PREF_TOKEN, "");
    mDrawer.InflateMenu ( (token == "") ? Resource.Menu.menu_drawer_notLoggedIn : Resource.Menu.menu_drawer);           
    mDrawer.Invalidate ();
    ...
}

RES /菜单/ menu_beforeLogin.xml

<android.support.v4.widget.DrawerLayout>
    <android.support.design.widget.CoordinatorLayout>
    ...
    </android.support.design.widget.CoordinatorLayout>
    <android.support.design.widget.NavigationView
        android:id="@+id/navigation_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="@drawable/menu_background"
        app:headerLayout="@layout/drawer_header" />
</android.support.v4.widget.DrawerLayout>

RES /菜单/ menu_afterLogin.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/navigation_login"
        android:icon="@drawable/navigation_login"
        android:title="@string/navigation_login" />
    <item
        android:id="@+id/navigation_notice"
        android:icon="@drawable/navigation_notice"
        android:title="@string/navigation_notice" />
    <item
        android:id="@+id/navigation_contactUs"
        android:icon="@drawable/navigation_contactUs"
        android:title="@string/navigation_contactUs" />
</menu>

1 个答案:

答案 0 :(得分:0)

添加此方法以在充气新菜单之前清除菜单项。

  

mDrawer.Menu.Clear();