如何在Android中更新菜单项

3

我有一个带菜单项的活动。每当用户进入此活动时,我都希望使用某些实用程序值更新textView的值。这是我的代码。

@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()的值已更新,它也不会得到更新。

如何解决这个问题?


Utility.ShoppingCartItemCount() 返回什么?它每次都会提供不同的值吗?因为每次显示菜单时,onPrepareOptionsMenu 方法肯定会被调用。所以,如果您没有看到更新的文本,那么您应该检查该方法。 - AADProgramming
@DeveshпјҢиҜ·жЈҖжҹҘеңЁиҝ”еӣһдё»жҙ»еҠЁж—¶Utility.ShoppingCartItemCount()жҳҜеҗҰдҝқз•ҷгҖӮеҰӮжһңжҳҜпјҢеҲҷжӣҙж”№жҙ»еҠЁзҡ„onResumeж–№жі•дёӯзҡ„TextViewж–Үжң¬гҖӮ - ELITE
1个回答

7

尝试使用invalidateOptionsMenu()

这会重新调用onCreateOptionsMenu(Menu)。

编辑)

我有一些类似下面的代码:

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

当用户点击其他按钮时,在Button的OnClickListener中的currentPage = 8之后添加invalidateOptionsMenu()。结果是,用户可以显示选项菜单。
编辑))
invalidateOptionsMenu()将强制重新加载onCreateOptionsMenu和onPrepareOptionsMenu。
如果这些方法对您不起作用,请尝试调试Utility.ShoppingCartItemCount()函数。

你自己试过了吗?它有效吗?你可能想将你的可行代码作为答案发布,这样OP可以验证。否则,你当前的帖子不太有用作为答案,更像是一条评论。 - AADProgramming
是的,我在我的项目中尝试了那段代码。我会在它上面添加更多可用的代码。 - WindSekirun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接