如何从 xml 动态生成导航抽屉项目?
How to generate Navigation Drawer item's dynamically from xml?
我准备了 2 个 xml 菜单文件并放在我的 res/menu 文件夹中。
如果用户未登录,将显示 menu_beforeLogin.xml。
他们登录后,菜单项将更改为 menu_afterLogin.xml.
我试图在我的 onResume() 方法中调用 InflateMenu(),但它最终会继续从 xml 文件每当调用 onResume() 而不是 removing/regenerate 菜单列表时。
我更愿意在 onResume() 方法中检查用户是否登录。
What is the proper way to change Navigation Drawer's list dynamically
?
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 ();
...
}
layout/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/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/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>
添加此方法以在扩充新菜单之前清除菜单项。
mDrawer.Menu.Clear ();
我准备了 2 个 xml 菜单文件并放在我的 res/menu 文件夹中。
如果用户未登录,将显示menu_beforeLogin.xml。 他们登录后,菜单项将更改为 menu_afterLogin.xml.
我试图在我的 onResume() 方法中调用 InflateMenu(),但它最终会继续从 xml 文件每当调用 onResume() 而不是 removing/regenerate 菜单列表时。
我更愿意在 onResume() 方法中检查用户是否登录。
What is the proper way to change Navigation Drawer's list dynamically ?
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 ();
...
}
layout/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/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/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>
添加此方法以在扩充新菜单之前清除菜单项。
mDrawer.Menu.Clear ();