Как улучшить способ скрыть / показать элементы меню NavigationView?
Мне было интересно, как я могу улучшить способ обработки доступа к пунктам меню в моем приложении.
Прежде всего, у меня есть вход в систему, когда пользователи входят в систему и, если это удается, извлекает список всех пунктов меню, к которым он может иметь доступ.
Затем в каждом действии мне нужно запустить метод, чтобы скрыть пункты меню, к которым у пользователя нет доступа.
Это называется 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
быть вызванным только один раз и сохранить эти изменения во всех видах деятельности?
2 ответа
Почему бы не сделать пользовательское действие, которое распространяется на AppCompatActivity
и переопределить onResume()
метод для вызова вашего setMenus()
,
class MenuCheckerActivty: AppCompatActivity() {
override fun onResume(){
super.onResume()
setMenus(listaMenuMuestra)
}
}
Теперь в вашей обычной деятельности, распространите его на MenuCheckerActivity
создано выше.
class MainActivtity: MenuCheckerActivity {
}
Так как мы переопределили onResume()
из MenuCheckerActivity
, setMenus()
функция будет вызываться всякий раз, когда super.onResume()
называется. Не тестировал код, но уверен, что он проясняет концепцию. Надеюсь, поможет.
Уже некоторое время пытаюсь это сделать. Как вы назначаете доступ пользователю? Хранятся ли разрешения в коде или вы связываете этот логин с чем-то вроде Firebase?