2014-10-25 2 views
16

Я реализовал SearchView в ActionBar перед использованием appcompat.v7 , но когда я хочу использовать SearchView с библиотекой поддержки v7 это показывает нулевое исключениеSearchView использованием AppCompat

В стиле

<item android:id="@+id/action_search" 
    android:title="@string/action_search" 
    android:icon="@drawable/ic_action_search" 
    app:showAsAction="always|collapseActionView" 
    android:actionViewClass="android.support.v7.widget.SearchView" /> 

В Java Class:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu, menu); 
    SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); 
    searchView.setOnQueryTextListener(this); 
    return super.onCreateOptionsMenu(menu); 
} 

Мой вопрос заключается в том, чтобы объявить SearchView в onCreateOptionsMenu, чтобы иметь возможность установить слушателя запросов?

+3

Как сказал Espen Riskedal: «изменить android: actionViewClass to app: actionViewClass» тоже важно. – gio

ответ

24

Вы должны использовать статические методы в MenuItemCompat, чтобы иметь дело со всеми пунктами меню AppCompat. Это было упомянуто в this blog post как последний элемент в разделе «Новая интеграция». Просто замените объявление SearchView следующим.

SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.action_search)); 

Вот ссылка на документацию MenuItemCompat.

Edit: Я просто предположил, что вы используете последнюю версию AppCompat с поддержкой нового Toolbar виджета.

+0

Это работает спасибо :) – A7madev

+1

Вы можете сделать это с помощью метода 'setOnSearchClickListener' в' SearchView'. http://developer.android.com/reference/android/support/v7/widget/SearchView.html – ebarrenechea

23

Если вы измените android:actionViewClass на номер app:actionViewClass, ваш существующий код продолжит работу.

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