如何在操作栏中更改TextView的文本?

3
在我的Android应用程序中,我以以下方式声明一个TextView:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    [...]

    <item
        android:id="@+id/intro_button"
        android:showAsAction="ifRoom"
        android:title="@string/intro_button"/>
    <item
        android:id="@+id/help_button"
        android:showAsAction="always|withText"
        android:title="@string/help_button"/>

    [...]

    <item
        android:id="@+id/user_id_label"
        android:actionViewClass="android.widget.TextView"
        android:showAsAction="ifRoom"
        android:title="@string/session_info_label"/>
</menu>

在应用程序启动时,启动活动1(它不使用操作栏)。完成后,它启动活动2,在其中显示操作栏。
在活动2开始时,我需要将视图@+id/user_id_label的文本设置为特定值。
我尝试在Activity2.onCreate和Activity2.onCreateOptionsMenu中执行此操作,但在这两种方法中,findViewById(R.id.user_id_label)都会返回null。
如何(使用哪种方法)才能检索到@+id/user_id_label文本视图的引用?
更新1(28.04.2013 20:25):我尝试过这个:
@Override
public boolean onCreateOptionsMenu(final Menu aMenu) {
    final MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.actions, aMenu);

    this.menu = aMenu;

    return true;
}

@Override
public boolean onPrepareOptionsMenu(final Menu aMenu) {
    final MenuItem menuItem = this.menu.findItem(R.id.user_id_label);                               
    menuItem.setTitle(getString(R.string.user_id_text,
            getIntent().getIntExtra(ConnectToServerActivity.USER_ID, -1)));
    return super.onPrepareOptionsMenu(aMenu);
}

但是标签仍未显示。

更新2(2013年4月28日21:05):

这个方法可以工作(在onPrepareOptionsMenu方法中):

final TextView textView = (TextView) menuItem.getActionView();

textView.setText(...);

1
嗨 @Dmitri,我尝试了你的更新2,但是我只得到了空的textView,有什么我错过的吗? - fifth
我遇到了与@fifth相同的空TextView问题,我怀疑这只在项目实际上是“shownAsAction”时才有效,而不是当它隐藏在溢出菜单中时。你觉得呢? - eskalera
1个回答

2

将您的OptionsMenu保存为字段变量的引用:

Menu mMenu;

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);

        [...]

        this.mMenu = menu;
        return true;
    }

然后你可以像这样做:
MenuItem myMenuItem = mMenu.findItem(R.id.user_id_label);
myMenuItem.setTitle("New title!");

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