web-dev-qa-db-ja.com

AppCompatを使用したSearchView

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を宣言する方法です。

19
A7madev

MenuItemCompatの静的メソッドを使用して、すべてのAppCompatメニュー項目を処理する必要があります。これは this blog post で「新しい統合」の最後の項目として言及されました。 SearchView宣言を次のように置き換えるだけです。

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

MenuItemCompat のドキュメントへのリンクです。

編集:新しいToolbarウィジェットをサポートするAppCompatの最新バージョンを使用していると想定しました。

26
ebarrenechea

Android:actionViewClassapp:actionViewClassに変更すると、既存のコードは引き続き機能します。

23
Espen Riskedal