2012-01-23 2 views
19

Можем ли мы реализовать SeachView в Android 2.2 с помощью ActionbarSherlock.Android ActionbarSherlock SearchView

Я использую следующий код, он работает отлично в 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) 
+0

Пожалуйста, обратите внимание на [этот ответ] (http://stackoverflow.com/questions/14991980/actionbarsherlock-searchview-setonquerytextlistener/15050518#15050518). Я не тестировал его с версиями ниже 3.0. –

ответ

11

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

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

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

+0

Альтернатива заключается в том, чтобы исключить виджет вашего вида поиска на основе версии ОС.Создайте свой собственный виджет вида поиска для устройств со сотовой связью и используйте по умолчанию API-11 +. – Cookster

+6

'SearchView' - очень продвинутый виджет. Это бэкпорт не будет тривиальным. Это может произойти в будущем, поскольку связана проблема, но это не приоритет для меня. Было бы идеально для вклада кого-то, хотя ... –

+5

SearchView реализован в ABS в версии 4.2. –

13

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

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

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

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

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

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

+1

Является ли SearchableInfo еще не поддерживаемым? IE Можно не следовать этому руководству в разделе «Настройка виджета поиска» http://developer.android.com/guide/topics/search/search-dialog.html Спасибо –

+3

С даты 12-12-2012, SearchView осуществляется в Вер. 4.2 АБС. –

+0

Это полезно знать! Спасибо за обновления. – Cookster

12
<?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>