4

У меня есть edittext как элемент действия в моей панели действий (ActionBarSherlock, на самом деле). макет находится в собственном xml, все работает отлично, я могу получить доступ к содержимому edittext и без проблем.addTextChangedListener() в EditText в android ActionBar

Я хотел бы добавить прослушиватель изменений в этот edittext. После загрузки onCreateOptionsMenu (меню Menu) и наполнение меню я создаю мой

EditText search=(EditText) findViewById(R.id.searchbar); // its name in a frame layout 

, а затем

search.addTextChangedListener(new TextWatcher(){ 

    @Override 
    public void afterTextChanged(Editable s) { 

    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 
    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, 
      int count) { 
    } 
}); 

я получаю пустые исключения указателя на этом EditText. Проблема, вероятно, является чем-то ослепительно очевидным, но это вызывает у меня большие проблемы.

Спасибо!

ответ

6

Панель действия не находится в пределах содержимого, поэтому вызовы findViewById всегда будут возвращать null.

Вместо этого вам необходимо позвонить menu.findItem(R.id.your_menu_item).getActionView(), чтобы получить ссылку на вид действия. Используя это представление, вы можете позвонить findViewById, чтобы получить ссылку на EditText (или если EditText является корневым представлением, то у вас уже есть ссылка).

+0

Джейк, вы действительно исключительный человек! Лучшая поддержка, которую я мог бы пожелать ;-). Конечно, мне нужно было это сделать: Просмотреть ref1 = menu.findItem (R.id.input) .getActionView(); EditText search = (EditText) ref1.findViewById (R.id.searchbar); и все работает нормально. Большой thaks и kudos. – Whitewall

0

Две мысли, ни гарантировано -

Вы проверили, что:

EditText search=(EditText) findViewById(R.id.searchbar); 

возвращает не ноль? Если он возвращает null:

  • Является ли SetContentView (справа файла!) Перед линией?
  • Есть ли проблема в вашем xml где-то ... или просто может потребоваться «чистая» и перестроить.

Или вы случайно сделали что-то для поиска между ними (например, его обьявили)?

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