Как использовать setText для установки текста существующего элемента EditText?

Правка: я идиот, продолжайте...

Код и xml ниже. Я не получаю никаких ошибок, но текст не отображается. Кто-нибудь знает, почему это не работает?

Код:

public boolean onPrepareMenuOptions ( Menu menu ) {
    EditText currency = (EditText) menu.findItem ( R.id.currency );
    currency.setText ( "test" );
    return true;
}

@Override
public boolean onCreateOptionsMenu ( Menu menu ) {
    getMenuInflater ().inflate ( R.menu.new_project, menu );
    return true;
}

XML:

<EditText
    android:id="@+id/currency"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/currency_summary" />

person abc32112    schedule 06.11.2013    source источник
comment
Вы вызвали sethasoptionmenu (true) в onCreate?   -  person Poutrathor    schedule 06.11.2013
comment
Работает ли это при вызове в методах onCreate() или onResume()?   -  person jlhonora    schedule 06.11.2013
comment
Я не вызываю sethasoptionmenu, но, похоже, это относится только к фрагментам? До таких еще не добрался. Изучение одной вещи за раз.. :) Помещение в onCreate дает: Метод setHasOptionsMenu(boolean) не определен для типа NewProjectActivity.   -  person abc32112    schedule 06.11.2013
comment
Вы пытались добавить return super.onPrepareOptionsMenu(menu); вместо return true?   -  person Jack K Fouani    schedule 06.11.2013
comment
Не удалось добавить в onCreate, undefined для типа .   -  person abc32112    schedule 06.11.2013


Ответы (2)


Я думаю, проблема в том, что onPrepareMenuOptions не вызывается. Вот что говорится в документации:

В Android 2.3.x и ниже система вызывает onPrepareOptionsMenu() каждый раз, когда пользователь открывает меню параметров (нажимает кнопку «Меню»).

В Android 3.0 и более поздних версиях меню параметров считается всегда открытым, когда элементы меню представлены на панели действий. Когда происходит событие, и вы хотите выполнить обновление меню, вы должны вызвать invalidateOptionsMenu(), чтобы запросить системный вызов onPrepareOptionsMenu().

Вы можете решить эту проблему двумя способами:

1) Способ 1: Обновите текст во время onCreateMenuOptions (можно напрямую обновить файл XML, если хотите)

2) Способ 2: вызовите invalidateOptionsMenu() где-нибудь в коде, непосредственно перед отображением меню.

Обновление: я заметил ошибку в вашем коде, должен вызывать super.onPrepareMenuOptions()

public boolean onPrepareMenuOptions ( Menu menu ) {
    super.onPrepareOptionsMenu(menu); // this is important
    EditText currency = (EditText) menu.findItem ( R.id.currency );
    currency.setText ( "test" );
    return true;
}

@Override
public boolean onCreateOptionsMenu ( Menu menu ) {
    getMenuInflater ().inflate ( R.menu.new_project, menu );
    return true;
}    `
person Amulya Khare    schedule 06.11.2013
comment
Ты прав! Я думал, что это было вызвано автоматически, по какой-то причине. - person abc32112; 06.11.2013
comment
Добавление вызова onPrepareMenuOptions решает проблему. Однако по какой-то причине я получаю исключение NullPointerException в строке currency.setText (test);. Эклипс не жалуется. - person abc32112; 06.11.2013
comment
что вы имеете в виду под добавлением вызова? Можете ли вы обновить код или, возможно, опубликовать новый вопрос ... не уверены, какой из них считается лучшим ...? - person Amulya Khare; 06.11.2013

попробуй это...

 EditText currency = (EditText) menu.findItem ( R.id.currency );
 SharedPreferences fill = getSharedPreferences("PREFS", 0);
 currency.setText ( fill.getString("string_name","String_Value" );
person Naveed Ali    schedule 06.11.2013
comment
Я решил проблему выше, используя метод 1, указанный Амуля Кхаре. Однако теперь я получаю исключение NullPointerException, созданное с помощью currency.setText. - person abc32112; 06.11.2013
comment
stackoverflow.com/questions/13179589/, перейдите по этой ссылке, она может вам помочь... - person Naveed Ali; 06.11.2013