2012-01-23 29 views
19

¿Podemos implementar SeachView en Android 2.2 utilizando ActionbarSherlock.Android ActionbarSherlock SearchView

estoy usando siguiente código, que está trabajando muy bien en 3.0 pero no funciona en 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; 
    } 

estoy consiguiendo error siguiente en 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

favor, eche un vistazo a [esta respuesta] (http://stackoverflow.com/questions/14991980/actionbarsherlock-searchview-setonquerytextlistener/15050518#15050518). No lo he probado con versiones inferiores a 3.0. –

Respuesta

11

Por desgracia, por lo que he leído y intentado, ActionBarSherlock no es compatible con el widget SearchView.

Android está preparado para lanzar un paquete de compatibilidad con versiones anteriores en el futuro, pero quién sabe cuándo será.

ver este enlace desde el hombre mismo: https://github.com/JakeWharton/ActionBarSherlock/issues/70

+0

Una alternativa es resaltar su widget de vista de búsqueda según la versión del sistema operativo.Cree su propio widget de vista de búsqueda para dispositivos pre-honeycomb y use el predeterminado para API-11 +. – Cookster

+6

'SearchView' es un widget muy avanzado. Su respaldo no sería trivial. Esto puede suceder en el futuro como dice el tema vinculado, pero no es una prioridad para mí. Sería perfecto para una contribución de alguien ... –

+5

SearchView se implementa en ABS en la versión 4.2. –

13

Una pequeña actualización:

  • Jake Wharton está trabajando actualmente en ActionBarSherlock 4.2.0 dev en rama y tiene SearchView portado allí. Tiene una funcionalidad limitada (lo más notable: no admite SearchableInfo). Pero él está trabajando en expandir la funcionalidad.

  • No sabía acerca de las intenciones de Jake Wharton en backporting SearchView e hice mi versión de backport (se puede encontrar en GitHub: abs-search-view). Mi versión tampoco es compatible con SearchableInfo.

Estas dos implementaciones se realizaron en su mayoría de la misma manera. Usan gran parte del mismo código tomado de AOSP. Pero hay algunas diferencias notables.

  • ActionBarSherlock backport apoya sugerencias adaptador
  • backport ActionBarSherlock no repliegue en el original SearchView aplicación en sistemas con API 11 o más (es decir, es el mismo código con pros y los contras de todas las plataformas).
  • Mi versión no es compatible con el adaptador de sugerencias (aunque se puede agregar).
  • Mi versión tiene funcionalidad limitada en sistemas antes de API 11 (donde se usa versión de código de respaldo) y en API 11 y posteriores todas las versiones originales de SearchView y todas las características son compatibles de la manera en que se describen en la documentación.

Personalmente, recomendaría seguir con la versión de ActionBarSherlock (es más fácil de esa manera). Y use mi biblioteca solo si necesita este comportamiento completamente funcional en sistemas con API 11 en adelante.

+1

¿Aún no es compatible con SearchableInfo? IE ¿Puede uno no seguir este tutorial en "Configuración del widget de búsqueda" http://developer.android.com/guide/topics/search/search-dialog.html Gracias –

+3

A partir de la fecha 12-06-2012, SearchView se implementa en Ver 4.2 de ABS. –

+0

¡Eso es bueno saber! Gracias por las actualizaciones. – 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> 
Cuestiones relacionadas