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