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)
小さな更新:
Jake Whartonは現在、dev
ブランチでActionBarSherlock4.2.0に取り組んでおり、そこにSearchView
がバックポートされています。機能が制限されています(最も注目すべき点-SearchableInfo
はサポートされていません)。しかし、彼は機能の拡張に取り組んでいます。
SearchView
のバックポートに関するJakeWhartonの意図を知らず、自分のバージョンのバックポートを実行しました(githubにあります: abs-search-view )。私のバージョンもSearchableInfo
をサポートしていません。
これらの2つの実装は、ほとんど同じ方法で行われました。それらは、AOSPから取得した同じコードの多くを使用します。しかし、いくつかの顕著な違いがあります。
SearchView
実装にフォールバックしません(つまり、すべてのプラットフォームで長所と短所がある同じコードです)。SearchView
にフォールバックされ、すべての機能がドキュメントに記載されている方法でサポートされています。 。個人的には、ActionBarSherlockバージョンを使用することをお勧めします(その方が簡単です)。また、API 11以降のシステムでこの完全に機能する動作が必要な場合にのみ、私のライブラリを使用してください。
<?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>
残念ながら、私が読んで試したことから、ActionBarSherlockはSearchViewウィジェットをサポートしていません。
Androidは、これをサポートする下位互換性パッケージを将来リリースする予定ですが、それがいつになるかは誰にもわかりません。
彼自身からのこのリンクを参照してください: https://github.com/JakeWharton/ActionBarSherlock/issues/7
同様の問題が発生したため、カスタムSearchViewを作成しました。たぶんあなたはそれをチェックしたいと思うでしょう https://github.com/benjaminmock/MenuItemSearchAction