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