19

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)
4

4 に答える 4

12

小さな更新:

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

  • 私はバックポートに関するジェイク・ウォートンの意図を知りませんでしSearchViewた、そして私のバージョンのバックポートをしました(githubで見つけることができます:abs-search-view)。私のバージョンもサポートしていませんSearchableInfo

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

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

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

于 2012-08-05T11:27:03.860 に答える
12
<?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>
于 2013-01-01T18:55:23.923 に答える
11

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

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

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

于 2012-01-25T06:44:25.463 に答える
4

同様の問題があったため、カスタム SearchView を作成しました。https://github.com/benjaminmock/MenuItemSearchActionで確認してみてください。

于 2012-07-04T16:50:09.700 に答える