Как улучшить способ скрыть / показать элементы меню NavigationView? - PullRequest
0 голосов
/ 10 января 2019

Мне было интересно, как я могу улучшить способ обработки доступа к пунктам меню в моем приложении.

Прежде всего, у меня есть активность входа в систему, когда пользователь входит в систему и, если это удастся, получает список всех пунктов меню, к которым он может иметь доступ.

Затем в каждом упражнении мне нужно запустить метод, чтобы скрыть пункты меню, к которым у пользователя нет доступа.

Он называется setMenus, а Список listaMenuMuestra - это список, полученный при входе в систему

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 только один раз и сохранить эти изменения во всех действиях?

1 Ответ

0 голосов
/ 14 января 2019

Почему бы не выполнить пользовательское действие, которое распространяется на AppCompatActivity, и переопределить onResume() метод для вызова вашего setMenus().

class MenuCheckerActivty: AppCompatActivity() {

  override fun onResume(){
     super.onResume()
     setMenus(listaMenuMuestra)
  }
}

Теперь в вашей обычной деятельности расширьте его до MenuCheckerActivity, созданного выше.

class MainActivtity: MenuCheckerActivity {

}

Поскольку мы переопределили onResume() из MenuCheckerActivity, функция setMenus() будет вызываться всякий раз, когда вызывается super.onResume(). Не тестировал код, но уверен, что он проясняет концепцию. Надеюсь, это поможет.

...