0

我准备了2个xml菜单文件,放在我的res /菜单文件夹中。如果用户没有在。 登录他们登录后,该菜单项将改为menu_afterLogin.xml如何从xml动态生成导航抽屉项目?

menu_beforeLogin.xml将被显示。

我试着叫InflateMenu()的onResume()方法,但它与不断增加的XML文件每当的onResume()代替调用删除的项目结束/重新生成菜单列表。

我宁愿检查用户是否登录或不在onResume()方法。

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

MainActivity.cs

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(); 
    ... 
} 

布局/ main.axml

<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_beforeLogin.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> 

RES /菜单/ menu_afterLogin.xml

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

回答

0

添加这种方法夸大新菜单之前清除您的菜单项。

mDrawer.Menu.Clear();