2013-04-28 3 views
3

В моей Android приложения У меня есть TextView объявленный следующим образом:Как изменить текст 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?

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

Но метка еще не показана.

Update 2 (28.04.2013 21:05):

Это один работает (в методе onPrepareOptionsMenu):

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

textView.setText(...); 
+1

Привет @Dmitri, я попробовал ваше обновление 2, но я получил только null textView, что-то пропустило для меня? – fifth

+0

У меня такой же нулевой TextView, что и @fifth, я подозреваю, что это работает, когда элемент на самом деле «показанAsAction», но не тогда, когда он скрыт в меню переполнения. Как вы думаете? – eskalera

ответ

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!"); 
+0

Спасибо. Я попробовал это - см. Мое обновление 1. –

Смежные вопросы