2012-01-23 24 views
19

Possiamo implementare SeachView in Android 2.2 utilizzando ActionbarSherlock.Barra delle azioni AndroidSherlock SearchView

Sto usando seguente codice, si sta lavorando bene in 3.0, ma non funziona in 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; 
    } 

sto ottenendo seguente errore su 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

Si prega di dare un'occhiata a [questa risposta] (http://stackoverflow.com/questions/14991980/actionbarsherlock-searchview-setonquerytextlistener/15050518#15050518). Non l'ho provato con versioni inferiori a 3.0. –

risposta

11

Purtroppo, da quello che ho letto e provato, ActionBarSherlock non supporta il widget SearchView.

Android è impostato per rilasciare un pacchetto di compatibilità con le versioni precedenti in futuro supportandolo, ma chissà quando lo sarà.

Vedi questo link dall'uomo stesso: https://github.com/JakeWharton/ActionBarSherlock/issues/70

+0

Un'alternativa è quella di visualizzare il widget della vista di ricerca in base alla versione del sistema operativo.Crea il tuo widget di visualizzazione di ricerca per dispositivi pre-a nido d'ape e usa l'impostazione predefinita per API-11 +. – Cookster

+6

'SearchView' è un widget molto avanzato. Il backport non sarebbe banale. Questo potrebbe accadere in futuro, come dice il problema collegato, ma non è una priorità per me. Sarebbe perfetto per un contributo da parte di qualcuno però ... –

+5

SearchView è implementato in ABS nella versione 4.2. –

13

un piccolo aggiornamento:

  • Jake Wharton sta attualmente lavorando su ActionBarSherlock 4.2.0 in dev ramo e ha SearchView backported lì. Ha funzionalità limitate (la più notevole - nessun supporto per SearchableInfo). Ma sta lavorando per espandere le funzionalità.

  • Non sapevo circa le intenzioni di Jake Wharton sulla backport SearchView e feci la mia versione di backport (si possono trovare su GitHub: abs-search-view). La mia versione inoltre non supporta SearchableInfo.

Queste due implementazioni sono state eseguite principalmente allo stesso modo. Usano gran parte dello stesso codice preso da AOSP. Ma ci sono alcune differenze notevoli.

  • ActionBarSherlock backport supporta adattatore suggerimenti
  • ActionBarSherlock backport non fallback su originale SearchView implementazione su sistemi con API 11 e fino (vale a dire che è lo stesso codice con pro e contro su tutte le piattaforme).
  • La mia versione non supporta l'adattatore suggerimenti (può essere aggiunto però).
  • La mia versione ha funzionalità limitate su sistemi precedenti all'API 11 (in cui viene utilizzata la versione di backport del codice) e su API 11 e versioni successive tutte le fallback alla versione nativa originale di SearchView e tutte le funzionalità sono supportate nel modo in cui sono descritte nella documentazione.

Personalmente, mi consiglia di attenersi alla versione ActionBarSherlock (è più semplice in questo modo). E usa la mia libreria solo se hai bisogno di questo comportamento pienamente funzionale sui sistemi con API 11 e successive.

+1

SearchableInfo non è ancora supportato? IE Non si può seguire questo tutorial in "Configurazione del widget di ricerca" http://developer.android.com/guide/topics/search/search-dialog.html Grazie –

+3

Data di scadenza 06-12-2012, SearchView è implementato in Ver 4.2 di ABS. –

+0

Buono a sapersi! Grazie per gli aggiornamenti. – 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> 
Problemi correlati