web-dev-qa-db-ja.com

Android ActionbarSherlock SearchView

ActionbarSherlockを使用してAndroid 2.2でSeachViewを実装できますか?.

私は次のコードを使用しています。3.0では正常に動作していますが、2.2では動作していません。

 @Override
public boolean onCreateOptionsMenu(Menu menu) {
    //getMenuInflater().inflate(R.menu.main_menu, menu);
     MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_menu, menu);
    // set up a listener for the refresh item


        SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
        final SearchView.OnQueryTextListener queryTextListener = new    SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextChange(String newText) {
                // Do something
                System.out.println("onQueryTextChange----------");
                return true;
            }
            @Override
            public boolean onQueryTextSubmit(String query) {
                // Do something
                System.out.println("onQueryTextSubmit----------");
                return true;
            }
        };
        searchView.setOnQueryTextListener(queryTextListener);

   return true;
     }

2.2で次のエラーが発生します

    at 01-23 17:31:53.230: W/MenuInflater(20214):   at Java.lang.ClassLoader.loadClass(ClassLoader.Java:511)
01-23 17:31:53.230: W/MenuInflater(20214):  at com.actionbarsherlock.internal.view.menu.MenuInflaterImpl$MenuState.newInstance(MenuInflaterImpl.Java:533)
01-23 17:31:53.230: W/MenuInflater(20214):  at com.actionbarsherlock.internal.view.menu.MenuInflaterImpl$MenuState.setItem(MenuInflaterImpl.Java:497)
01-23 17:31:53.230: W/MenuInflater(20214):  at com.actionbarsherlock.internal.view.menu.MenuInflaterImpl$MenuState.addItem(MenuInflaterImpl.Java:515)
01-23 17:31:53.230: W/MenuInflater(20214):  at com.actionbarsherlock.internal.view.menu.MenuInflaterImpl.parseMenu(MenuInflaterImpl.Java:238)
01-23 17:31:53.230: W/MenuInflater(20214):  at com.actionbarsherlock.internal.view.menu.MenuInflaterImpl.inflate(MenuInflaterImpl.Java:164)
01-23 17:31:53.230: W/MenuInflater(20214):  at com.actionbarsherlock.sample.styledactionbar.MainActivity.onCreateOptionsMenu(MainActivity.Java:99)
01-23 17:31:53.230: W/MenuInflater(20214):  at Android.support.v4.app.FragmentActivity.dispatchCreateOptionsMenu(FragmentActivity.Java:601)
01-23 17:31:53.230: W/MenuInflater(20214):  at Android.support.v4.app.FragmentActivity.invalidateOptionsMenu(FragmentActivity.Java:706)
19
Ravikumar11

小さな更新:

  • Jake Whartonは現在、devブランチでActionBarSherlock4.2.0に取り組んでおり、そこにSearchViewがバックポートされています。機能が制限されています(最も注目すべき点-SearchableInfoはサポートされていません)。しかし、彼は機能の拡張に取り組んでいます。

  • SearchViewのバックポートに関するJakeWhartonの意図を知らず、自分のバージョンのバックポートを実行しました(githubにあります: abs-search-view )。私のバージョンもSearchableInfoをサポートしていません。

これらの2つの実装は、ほとんど同じ方法で行われました。それらは、AOSPから取得した同じコードの多くを使用します。しかし、いくつかの顕著な違いがあります。

  • ActionBarSherlockバックポートは提案アダプターをサポートします
  • ActionBarSherlockバックポートは、API11以降を搭載したシステムでの元のSearchView実装にフォールバックしません(つまり、すべてのプラットフォームで長所と短所がある同じコードです)。
  • 私のバージョンは提案アダプターをサポートしていません(ただし、追加することはできます)。
  • 私のバージョンでは、API 11より前のシステム(バックポートバージョンのコードが使用されている)およびAPI 11以降では、すべてが元のネイティブバージョンのSearchViewにフォールバックされ、すべての機能がドキュメントに記載されている方法でサポートされています。 。

個人的には、ActionBarSherlockバージョンを使用することをお勧めします(その方が簡単です)。また、API 11以降のシステムでこの完全に機能する動作が必要な場合にのみ、私のライブラリを使用してください。

12
inazaruk
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android" >

    <item
    Android:id="@+id/search"
    Android:actionLayout="@layout/layout_menu_search"
    Android:actionViewClass="com.actionbarsherlock.widget.SearchView"
    Android:icon="@drawable/ic_menu_search"
    Android:orderInCategory="1"
    Android:showAsAction="always|collapseActionView"/>

</menu>
12
sonida

残念ながら、私が読んで試したことから、ActionBarSherlockはSearchViewウィジェットをサポートしていません。

Androidは、これをサポートする下位互換性パッケージを将来リリースする予定ですが、それがいつになるかは誰にもわかりません。

彼自身からのこのリンクを参照してください: https://github.com/JakeWharton/ActionBarSherlock/issues/7

11
Cookster

同様の問題が発生したため、カスタムSearchViewを作成しました。たぶんあなたはそれをチェックしたいと思うでしょう https://github.com/benjaminmock/MenuItemSearchAction

4
mseo