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)

person Ravikumar11    schedule 23.01.2012    source источник
comment
Пожалуйста, взгляните на этот ответ. Я не тестировал его с версиями ниже 3.0.   -  person Dave Agaba    schedule 24.02.2013


Ответы (3)


Небольшое обновление:

  • Джейк Уортон в настоящее время работает над ActionBarSherlock 4.2.0 в ветке dev и имеет там бэкпорт SearchView. Он имеет ограниченную функциональность (самое примечательное — нет поддержки SearchableInfo). Но он работает над расширением функционала.

  • Я не знал о намерениях Джейка Уортона по бэкпорту SearchView и сделал свою версию бэкпорта (можно найти на github: abs-search-view). Моя версия тоже не поддерживает SearchableInfo.

Эти две реализации были сделаны в основном одинаково. Они используют большую часть того же кода, взятого из AOSP. Но есть некоторые заметные отличия.

  • Бэкпорт ActionBarSherlock поддерживает адаптер предложений
  • Бэкпорт ActionBarSherlock не отменяет исходную реализацию SearchView в системах с API 11 и выше (т. е. это один и тот же код со своими плюсами и минусами на всех платформах).
  • Моя версия не поддерживает адаптер предложений (хотя его можно добавить).
  • Моя версия имеет ограниченную функциональность в системах до API 11 (где используется бэкпорт-версия кода), а в API 11 и выше все откатывается к исходной нативной версии SearchView, и все функции поддерживаются так, как они описаны в документации.

Лично я бы рекомендовал придерживаться версии ActionBarSherlock (так проще). И используйте мою библиотеку, только если вам нужно это полнофункциональное поведение в системах с API 11 и выше.

person inazaruk    schedule 05.08.2012
comment
SearchableInfo все еще не поддерживается? IE Можно ли не следовать этому руководству в разделе Настройка виджета поиска developer.android. com/guide/topics/search/search-dialog.html Спасибо. - person Thomas Clowes; 14.11.2012
comment
По состоянию на 12.06.2012 SearchView реализован в версии 4.2 ABS. - person Gaurav Agarwal; 05.12.2012

К сожалению, из того, что я читал и пробовал, ActionBarSherlock не поддерживает виджет SearchView.

В будущем Android собирается выпустить пакет обратной совместимости, поддерживающий это, но кто знает, когда это произойдет.

См. эту ссылку от самого человека: https://github.com/JakeWharton/ActionBarSherlock/issues/70

person Cookster    schedule 25.01.2012
comment
Альтернативой является выбор виджета представления поиска в зависимости от версии ОС. Создайте свой собственный виджет представления поиска для устройств до сотовой связи и используйте значение по умолчанию для API-11+. - person Cookster; 26.01.2012
comment
SearchView — очень продвинутый виджет. Его бэкпорт не будет тривиальным. Это может произойти в будущем, как говорится в связанной проблеме, но для меня это не приоритет. Хотя было бы идеально для чьего-то вклада... - person Jake Wharton; 28.01.2012
comment
SearchView реализован в ABS версии 4.2. - person Gaurav Agarwal; 05.12.2012

У меня была похожая проблема, поэтому я создал собственный SearchView. Возможно, вы захотите проверить это на https://github.com/benjaminmock/MenuItemSearchAction.

person mseo    schedule 04.07.2012