Android ActionbarSherlock SearchView
Можем ли мы реализовать SeachView в Android 2.2 с помощью ActionbarSherlock.
Я использую следующий код, он отлично работает в версии 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)
Ответы
Ответ 1
Небольшое обновление:
-
В настоящее время Джейк Уортон работает над ActionBarSherlock 4.2.0 в ветке dev
и имеет SearchView
. Он имеет ограниченную функциональность (наиболее заметным - без поддержки SearchableInfo
). Но он работает над расширением функциональности.
-
Я не знал о намерениях Джейка Уортона по поводу backporting SearchView
и сделал мою версию backport (можно найти в github: abs-search-view). Моя версия также не поддерживает SearchableInfo
.
Эти две реализации выполнялись в основном одинаково. Они используют большую часть того же кода, взятого из AOSP. Но есть некоторые заметные отличия.
- ActionBarSherlock backport поддерживает адаптеры предложений
- ActionBarSherlock backport не отступает от первоначальной реализации
SearchView
в системах с API 11 и выше (т.е. это тот же код с плюсами и минусами на всех платформах).
- Моя версия не поддерживает адаптер предложений (его можно добавить, хотя).
- Моя версия имеет ограниченные функциональные возможности для систем до API 11 (где используется версия backport версии кода), а на API 11 и выше все возвращается к исходной исходной версии
SearchView
, и все функции поддерживаются так, как они описаны в документации.
Лично я бы рекомендовал придерживаться версии ActionBarSherlock (это просто проще). И используйте мою библиотеку, только если вам нужно это полностью функциональное поведение в системах с API 11 и выше.
Ответ 2
<?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>
Ответ 3
К сожалению, из того, что я прочитал и попробовал, ActionBarSherlock не поддерживает виджет SearchView.
Android в будущем будет поддерживать пакет обратной совместимости, но кто знает, когда это будет.
Посмотрите эту ссылку от самого человека:
https://github.com/JakeWharton/ActionBarSherlock/issues/70
Ответ 4
У меня была аналогичная проблема, поэтому я создал пользовательский SearchView. Возможно, вы хотите проверить это на https://github.com/benjaminmock/MenuItemSearchAction