2016-11-11 1 views
0

Meine App muss eine Option im Menü anzeigen, je nach der Erlaubnis des Benutzers.Option hinzufügen Menü auf Runtime Android

das Element im Menü ist wie:

<item 
    android:id="@+id/action_waittime" 
    android:visible="false" 
    android:orderInCategory="100" 
    android:title="@string/action_waittime" 
    app:showAsAction="never"/> 

und wenn die Aktivität starten, standardmäßig deaktiviert sein. Dann in oncreate() I IQ Anfrage ist fertig:

mConnection.subscribeIQResponseFromNamespace(this, NAMESPACE); 
     WaitTimeIQ waitTimeIQ = new WaitTimeIQ(); 
     //waitTimeIQ.setFrom(mConnection.getUser()); 
     try { 
      waitTimeIQ.setTo(JidCreate.from("chvcomponent.chv.cat")); 
     } catch (XmppStringprepException e) { 
      e.printStackTrace(); 
     } 
     waitTimeIQ.setType(IQ.Type.get); 
     mConnection.sendIQMessage(waitTimeIQ); 

Danach werde ich die Erlaubnis Antwort erhalten. Wenn die Antwort "gewährt" ist, muss ich die Option anzeigen.

ich dies tun:

public void activeOption(string autho) { 
    if (autho.equals("granted")) { 
     Menu mMenu = mToolbar.getMenu(); 
     mMenu.getItem(R.id.action_waittime).setVisible(true); 
     invalidateOptionsMenu(); 
    } 
} 

Aber, es ist nicht aufgefrischt wird und nicht gezeigt.

Wie kann ich es sichtbar machen?

Antwort

1

In Ihrer Tätigkeit

private Menu menu; 

In onCreateOptionsMenu (Menü Menü)

this.menu = menu; 

und dann in

public void activeOption(string autho) { 
    if (autho.equals("granted")) { 
     MenuItem item = menu.findItem(R.id.action_waittime); 
     item.setVisible(true); 
    } 
} 
+0

Danke, es hat funktioniert, nur mit einigen Konfigurationen, da die Antwort ankommen kann, bevor das 'onCreateOptionsMenu (Menü Menü)' aufgerufen wird. also musste ich validieren, ob 'menu! = null 'in' activeOption (..) 'ist und ein Flag aktivieren, wenn es so ist, um' onCreateOptionsMenu() 'zu tun. Nur um zu erlauben, ob ein Erscheinen vor oder nach dem Drucken fällig ist, Server Lag. Danke noch einmal! – Shudy

0

Ich glaube, dass Sie brauchen, um (oder zumindest können) Setzen Sie die Sichtbarkeit innerhalb der Aktivität auf onPrepareOptionsMenu.

Als Beispiel: -

@Override 
    public boolean onPrepareOptionsMenu(Menu menu) { 
     MenuItem reviewdisabledsuggestions = menu.findItem(R.id.reviewdisabledsuggestions); 

     /** 
     * Enable Review Disabled Rule Suggestions only if some rules are disabled 
     */ 
     if(shopperdb.getDisabledRuleCount() > 0) { 
      reviewdisabledsuggestions.setVisible(true); 
     } else { 
      reviewdisabledsuggestions.setVisible(false); 
     } 
    }