SearchView с помощью AppCompat

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

В стиле

<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:

@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, чтобы иметь возможность устанавливать прослушиватель запросов?

Ответы

Ответ 1

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

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

Здесь приведена ссылка на документацию MenuItemCompat.

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

Ответ 2

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