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
, ваш существующий код продолжит работу.