Appcompat.v7を使用する前にSearchViewをActionbarに実装しましたが、サポートライブラリv7でSearchViewを使用したい場合、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);
}
私の質問は、クエリリスナーを設定できるようにonCreateOptionsMenuでSearchViewを宣言する方法です。
MenuItemCompat
の静的メソッドを使用して、すべてのAppCompatメニュー項目を処理する必要があります。これは this blog post で「新しい統合」の最後の項目として言及されました。 SearchView
宣言を次のように置き換えるだけです。
SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.action_search));
MenuItemCompat のドキュメントへのリンクです。
編集:新しいToolbar
ウィジェットをサポートするAppCompatの最新バージョンを使用していると想定しました。
Android:actionViewClass
をapp:actionViewClass
に変更すると、既存のコードは引き続き機能します。