【问题标题】:How to Improve the way to Hide/Show NavigationView menu Items?如何改进隐藏/显示 NavigationView 菜单项的方式?
【发布时间】:2019-01-10 11:44:31
【问题描述】:

我想知道如何改进我在应用中处理菜单项访问的方式。

首先我有一个用户登录的登录活动,如果成功,它会检索他可以访问的所有菜单项的列表。

然后在每个活动中我需要运行该方法来隐藏用户无法访问的菜单项。

它叫setMenus,ListlistaMenuMuestra是Login 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>

我面临的“问题”是我有很多活动,而且在每个活动上都必须运行setMenus 对我来说似乎很奇怪。

所以问题是有没有更好的方法来处理具有多个活动和 NavigationDrawer 的菜单项访问?是否可以只调用一次 setMenus 并在所有活动中保留这些更改?

【问题讨论】:

    标签: java android navigationview


    【解决方案1】:

    为什么不创建一个扩展至AppCompatActivity 的自定义活动并覆盖onResume() 方法来调用您的setMenus()

    class MenuCheckerActivty: AppCompatActivity() {
    
      override fun onResume(){
         super.onResume()
         setMenus(listaMenuMuestra)
      }
    }
    

    现在在您的正常活动中,将其扩展到上面创建的MenuCheckerActivity

    class MainActivtity: MenuCheckerActivity {
    
    }
    

    由于我们已经覆盖了MenuCheckerActivityonResume(),所以每当调用super.onResume() 时都会调用setMenus() 函数。 尚未测试代码,但很确定它阐明了这个概念。希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-10
      • 2011-11-11
      • 2021-06-08
      • 2019-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多