在我的 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>
在应用程序启动时,启动 Activity 1(它不使用操作栏)。完成后,它会启动 Activity 2,其中会显示操作栏。
在 Activity 2 开始时,我需要将 View @+id/user_id_label
的文本设置为某个值。
我尝试在 Activity2.onCreate
和 Activity2.onCreateOptionsMenu
中执行此操作,但是在这两种方法中 findViewById(R.id.user_id_label)
返回 null
。
我如何(使用哪种方法)检索对 @+id/user_id_label
TextView 的引用?
更新 1(2013 年 4 月 28 日 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(...);
最佳答案
在字段变量中保存对 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!");
关于android - 如何更改操作栏中 TextView 的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16264689/