2016-11-11 119 views
0

我的应用程序必须在菜单中显示一个选项,具体取决于用户的权限。在运行时添加选项菜单Android

菜单中的项目是这样的:

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

,并在活动推出后,将默认为禁用。然后在oncreate()I IQ请求完成:

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); 

之后,我会收到权限答案。如果答复是“授予”,我必须显示选项。

我这样做:

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

但是,它不会刷新,而不是显示。

我该如何设法使其可见?

回答

1

在你的活动

private Menu menu; 

在onCreateOptionsMenu(菜单菜单)

this.menu = menu; 

,然后在

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

谢谢,它的工作,只是一些配置,这是因为'onCreateOptionsMenu(菜单菜单)'调用前的反应可以到达。所以我必须验证'activeOption(..)'中是否有'menu!= null',并且如果是这样,则激活一个标记,以执行onCreateOptionsMenu()。只是为了允许如果respnse在打印到期之前或之后到达,服务器滞后。再次感谢! – Shudy

0

我相信,你需要(或至少可以)在活动中设置onPrepareOptionsMenu中的可见性。

举个例子: -

@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); 
     } 
    }