[英]How to Improve the way to Hide/Show NavigationView menu Items?
我想知道如何改進我在我的應用程序中處理菜單項訪問的方式。
首先,我有一個用戶登錄的登錄活動,如果成功,它會檢索他可以訪問的所有菜單項的列表。
然后在每個活動中,我需要運行該方法來隱藏用戶無法訪問的菜單項。
其名為setMenus
和List listaMenuMuestra
是在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>
我面臨的“問題”是我有很多活動,對我來說,在每個Activity上運行setMenus
似乎很奇怪。
所以問題是有沒有更好的方法來處理多個活動和NavigationDrawer的菜單項訪問? 只能調用setMenus
一次並在所有活動中保留這些更改嗎?
為什么不進行擴展到AppCompatActivity
的自定義活動並覆蓋onResume()
方法來調用setMenus()
。
class MenuCheckerActivty: AppCompatActivity() {
override fun onResume(){
super.onResume()
setMenus(listaMenuMuestra)
}
}
現在,在您的正常活動中,將其擴展到MenuCheckerActivity
創建的MenuCheckerActivity
。
class MainActivtity: MenuCheckerActivity {
}
由於我們已經覆蓋了MenuCheckerActivity
的onResume()
, MenuCheckerActivity
只要調用super.onResume()
就會調用setMenus()
函數。 沒有測試過代碼,但很確定它澄清了這個概念。 希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.