Android ActionbarSherlock SearchView - PullRequest
       1

Android ActionbarSherlock SearchView

19 голосов
/ 23 января 2012

Можем ли мы реализовать 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)

Ответы [ 4 ]

12 голосов
/ 01 января 2013
<?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>
12 голосов
/ 05 августа 2012

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

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

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

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

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

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

11 голосов
/ 25 января 2012

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

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

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

4 голосов
/ 04 июля 2012

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

...