Italian Chiarimento su B4XPages e AddMenuItem

Luciano Anselmetti

Member
Licensed User
Buongiorno a tutti, sto mettendo giù un programmino in B4A usando B4XPages.
Alla creazione della main page, aggiungo due voci fisse al menù, con B4XPages.AddMenuItem.
Quando l'utente viene verificato e vengono ricevuti i diritti di accesso, nel caso abbia anche quelli amministrativi aggiungo un'ulteriore voce per accedere alla pagina di configurazione.

Mi capita, però, che questa terza voce di menù, aggiunta a posteriori, non appaia fino a che non esco (cambiando pagina) e rientro nella principale.

Qui il primo caricamento:

B4X:
Private Sub B4XPage_Created (Root1 As B4XView)
    Root = Root1
    Root.LoadLayout("layMain")
    ....
 
    B4XPages.AddMenuItem(Me,K.MNU_VERS)
    B4XPages.AddMenuItem(Me,K.MNU_EXIT)

    btnMenu1.Text="Vita matricola"

    ....eccetera
End Sub

Dopo il login, quando ho ricevuto i diritti dell'utente, richiamo una sub, dove, se necessario, aggiungo la terza voce di menù:

B4X:
Private Sub ImpostaMenu(Diritti As String)

    msAbilMenu=Regex.Split("",Diritti)
    ....
    If msAbilMenu(5)<>"N" Then
        btnMenu6.Visible=True
    End If
     If msAbilMenu(6)<>"N" Then
        'Settimo flag: configurazione
        B4XPages.AddMenuItem(Me,K.MNU_CONF)
     End If
        
End Sub

Fatto questo, se guardo il menù ora, ci sono ancora solo due voci. Quando cambio pagina, se rientro nella main la terza voce appare correttamente. Non è un grosso problema, dato che probabilmente chi avrà diritti per accedere alla configurazione sarò solo io, sapendolo farò la manovra per far comparire la configurazione. Solo che mi assilla il fatto di non riuscire a pilotare correttamente il menù.
Se agissi a livello di Activity? Nel caso di più pagine, è sempre la stessa o ce n'è una per pagina (per non riportare il menù anche nelle altre)?

Qualcuno ha qualche idea su come potrei far sì che il menù venga aggiornato fin da subito?

Grazie a tutti :)
 

LucaMs

Expert
Licensed User
Longtime User
Ciao.

Premesso che non mi è mai piaciuto usare quel tipo di menu - questione di gusti, so che è molto usato - ho voluto provare, giusto per vedere se avrei potuto dare una mano.

Mi sembra che non ci sia possibilità di "rinfrescare" il menu, proprio come hai scritto. Vedrò se sia possibile apportando modifiche alla libreria B4XPages.
Normalmente, meglio non aggiungere codice all'Activity Main.

Comunque, prenderei molto in considerazione questa risposta di Erel:
It is actually simpler in B4J and B4A to modify the menu, however if you are building a cross platform solution then it will be easier to use a different interface element such as a drawer or a B4XDialog + B4XListTemplate.
 

LucaMs

Expert
Licensed User
Longtime User
Trovata la soluzione:

B4X:
Private Sub ImpostaMenu(Diritti As String)

    msAbilMenu=Regex.Split("",Diritti)
    ....
    If msAbilMenu(5)<>"N" Then
        btnMenu6.Visible=True
    End If
     If msAbilMenu(6)<>"N" Then
        'Settimo flag: configurazione
        B4XPages.AddMenuItem(Me,K.MNU_CONF)

        Dim ctxt As JavaObject
        ctxt.InitializeContext
        ctxt.RunMethod("invalidateOptionsMenu", Null)
     End If
End Sub
 

Luciano Anselmetti

Member
Licensed User
Caspita, grazie1000 LucaMS!! Funziona perfettamente!

Sì, avevo visto anch'io a suo tempo quel post di Erel. Sono forse un po' legato ai vecchi sistemi su VB6, col menù in alto a discesa... mi viene più spontaneo.
Quando avrò un attimo, mi studio meglio un sistema più "androidiano" per gestire i menù :) .

Grazie di nuovo
 
Top