2016-05-08 65 views
0

我有一个菜单项的活动。每次当用户来到这个活动,我想用一些效用值更新textView的值。这是我的代码。如何更新android中的菜单项

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_my2, menu); 
    return true; 
} 

@Override 
public boolean onPrepareOptionsMenu(Menu menu){ 
    RelativeLayout badgeLayout = (RelativeLayout) menu.findItem(R.id.badge).getActionView(); 
    TextView tv = (TextView) badgeLayout.findViewById(R.id.actionbar_notifcation_textview); 
    tv.setText(String.valueOf(Utility.ShoppingCartItemCount())); 
    return true; 
} 

这仅更新一次值(启动活动时)。但是,当用户从此活动中移出并再次发生此活动时,即使更新了Utility.ShoppingCartItemCount()的值,也不会更新。

如何解决这个问题?

+0

什么呢'Utility.ShoppingCartItemCount())'回报?它是否每次都为您提供不同的价值?因为,每当显示菜单时,肯定会调用'onPrepareOptionsMenu'。所以如果你没有看到更新的文本,那一定是你应该检查的方法 – AADProgramming

+0

@Devesh检查当你回到你的主要活动时,Utility.ShoppingCartItemCount()会一直存在。如果是这样,请在'onResume'方法中更改'TextView'的文本.. – ELITE

回答

4

尝试invalidateOptionsMenu()

这将再次调用onCreateOptionsMenu(菜单)。

编辑

我有一个像下面

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    if (currentPage == 8) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.menu_p, menu); 
     return true; 
    } else { 
     return false; 
    } 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.purchaseRestore: 
      // TODO: Restore purchase 
      return true; 
     case R.id.purchaseTerm: 
      // TODO: Show Term by WebView 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

当我的用户点击另一个按钮一些代码,把invalidateOptionsMenu()当前页= 8后,巴顿的OnClickListener。结果,用户可以显示选项菜单。

编辑))

invalidateOptionsMenu()将重载onCreateOptionsMenu和onPrepareOptionsMenu。

如果这个方法不适合你的工作,尝试调试Utility.ShoppingCartItemCount()。

+0

你自己试过了吗?它有效吗?您可能需要将您的工作代码发布为答案,以便OP可以进行验证。否则,您当前的帖子作为答案并不多,而且更多的是评论。 – AADProgramming

+0

是的,我尝试在我的项目中的代码。我会在其上添加更多工作代码。 – WindSekirun

相关问题