如何改进 Hide/Show NavigationView 菜单项的方式?
How to Improve the way to Hide/Show NavigationView menu Items?
我想知道如何改进我在我的应用程序中处理菜单项访问的方式。
首先,我有一个登录 Activity,用户可以在其中登录,如果成功,它会检索他可以访问的所有菜单项的列表。
然后在每个 activity 中我需要 运行 隐藏用户无法访问的菜单项的方法。
它叫setMenus
,ListlistaMenuMuestra
是登录时得到的列表Activity
public void setMenus(List<ListaMenu> listaMenuMuestra){
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
Menu nav_menu = navigationView.getMenu();
for(int i = 0; i < listaMenuMuestra.size(); i++){
try{
int idMenu = getResources().getIdentifier(listaMenuMuestra.get(i).getIdMenu(), "id", getPackageName());
nav_menu.findItem(idMenu).setVisible(true);
}catch (Exception ex){
Log.d("error","error");
}
}
这是我的 activity_main_drawer.xml
。默认情况下,所有项目都是不可见的。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:showIn="navigation_view">
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_inicio"
android:icon="@drawable/ic_menu_home"
android:title="Inicio"
android:visible="false"/>
<item
android:id="@+id/nav_ultimas"
android:icon="@drawable/ic_menu_send"
android:title="Últimas consultas"
android:visible="false"/>
</group>
<item android:title="Estadísticas"
android:id="@+id/nav_tituloestadisticas"
android:icon="@drawable/ic_insert_chart">
<menu>
<item
android:id="@+id/nav_torta"
android:icon="@drawable/ic_pie_chart"
android:title="Gráfico de torta"
android:visible="false"/>
<item
android:id="@+id/nav_lineal"
android:icon="@drawable/ic_show_chart"
android:title="Análisis por fechas"
android:visible="false"/>
</menu>
</item>
</menu>
我面临的 "problem" 是我有很多活动,我觉得每个 Activity 都必须 运行 setMenus
似乎很奇怪。
所以问题是是否有更好的方法来处理多个活动和 NavigationDrawer 的菜单项访问?能否仅 setMenus
调用一次并在所有活动中保留这些更改?
为什么不创建一个扩展到 AppCompatActivity
的自定义 activity 并覆盖 onResume()
方法来调用您的 setMenus()
.
class MenuCheckerActivty: AppCompatActivity() {
override fun onResume(){
super.onResume()
setMenus(listaMenuMuestra)
}
}
现在在您的正常 activity 中,将其扩展到上面创建的 MenuCheckerActivity
。
class MainActivtity: MenuCheckerActivity {
}
因为我们已经覆盖了MenuCheckerActivity
的onResume()
,所以只要调用super.onResume()
,就会调用setMenus()
函数。
尚未测试代码,但可以肯定它阐明了这个概念。希望对你有帮助。
我想知道如何改进我在我的应用程序中处理菜单项访问的方式。
首先,我有一个登录 Activity,用户可以在其中登录,如果成功,它会检索他可以访问的所有菜单项的列表。
然后在每个 activity 中我需要 运行 隐藏用户无法访问的菜单项的方法。
它叫setMenus
,ListlistaMenuMuestra
是登录时得到的列表Activity
public void setMenus(List<ListaMenu> listaMenuMuestra){
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
Menu nav_menu = navigationView.getMenu();
for(int i = 0; i < listaMenuMuestra.size(); i++){
try{
int idMenu = getResources().getIdentifier(listaMenuMuestra.get(i).getIdMenu(), "id", getPackageName());
nav_menu.findItem(idMenu).setVisible(true);
}catch (Exception ex){
Log.d("error","error");
}
}
这是我的 activity_main_drawer.xml
。默认情况下,所有项目都是不可见的。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:showIn="navigation_view">
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_inicio"
android:icon="@drawable/ic_menu_home"
android:title="Inicio"
android:visible="false"/>
<item
android:id="@+id/nav_ultimas"
android:icon="@drawable/ic_menu_send"
android:title="Últimas consultas"
android:visible="false"/>
</group>
<item android:title="Estadísticas"
android:id="@+id/nav_tituloestadisticas"
android:icon="@drawable/ic_insert_chart">
<menu>
<item
android:id="@+id/nav_torta"
android:icon="@drawable/ic_pie_chart"
android:title="Gráfico de torta"
android:visible="false"/>
<item
android:id="@+id/nav_lineal"
android:icon="@drawable/ic_show_chart"
android:title="Análisis por fechas"
android:visible="false"/>
</menu>
</item>
</menu>
我面临的 "problem" 是我有很多活动,我觉得每个 Activity 都必须 运行 setMenus
似乎很奇怪。
所以问题是是否有更好的方法来处理多个活动和 NavigationDrawer 的菜单项访问?能否仅 setMenus
调用一次并在所有活动中保留这些更改?
为什么不创建一个扩展到 AppCompatActivity
的自定义 activity 并覆盖 onResume()
方法来调用您的 setMenus()
.
class MenuCheckerActivty: AppCompatActivity() {
override fun onResume(){
super.onResume()
setMenus(listaMenuMuestra)
}
}
现在在您的正常 activity 中,将其扩展到上面创建的 MenuCheckerActivity
。
class MainActivtity: MenuCheckerActivity {
}
因为我们已经覆盖了MenuCheckerActivity
的onResume()
,所以只要调用super.onResume()
,就会调用setMenus()
函数。
尚未测试代码,但可以肯定它阐明了这个概念。希望对你有帮助。