2013-08-22 24 views
8

Ho riscontrato questo errore in y Logcat. Qualcuno sa di cosa si tratta?

08-22 19:02:57.830: E/dalvikvm(660): Could not find class 'android.support.v7.widget.SearchView$5', referenced from method android.support.v7.widget.SearchView.addOnLayoutChangeListenerToDropDownAnchorSDK11 
+0

non riesce a trovare quella classe. Hai quella libreria nella tua cartella 'libs'? –

+0

Sì, ho la classe SearchView nella libreria, ho importato la libreria android-support-v7-appcompat per aggiungere l'API actionbare pre 11 – Bombolo

+0

Hai aggiunto la libreria di supporto v7? – Azrael94

risposta

11

Non c'è un sacco di codice di andare fuori di qui, ma mi sono imbattuto in questa situazione io e qui è quello che è successo a me:

stavo usando la libreria compat v7 al fine di avere un ActionBar su Android 2 Sto implementando l'interfaccia di ricerca.

Codice Configurazione di base (in onCreateOptionsMenu())

SearchManager searchManager = 
     (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE); 
SupportMenuItem searchMenuItem = ((SupportMenuItem) menu.findItem(R.id.menu_search)); 
SearchView searchView = (SearchView) searchMenuItem.getActionView(); 
searchView.setSearchableInfo(searchManager.getSearchableInfo(activity.getComponentName())); 

inappropriato Codice

searchMenuItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() { 
    @Override 
    public boolean onMenuItemActionExpand(MenuItem item) { 
     // on search expand stuff 
     return true; 
    } 

    @Override 
    public boolean onMenuItemActionCollapse(MenuItem item) { 
     // on search collapse stuff 
     return true; 
    } 
}); 

Purtroppo il problema qui è che noi chiediamo un metodo che viene supportato solo in v14 così abbiamo ottenere un errore di runtime "strano" quando tenta di caricare alcune classi che vengono utilizzate in modo implicito. Questa non è una buona spiegazione, ma fondamentalmente è lo stesso motivo per cui abbiamo bisogno di usare getSupportActionBar() invece di getActionBar().

Buono Codice

searchMenuItem.setSupportOnActionExpandListener(new MenuItemCompat.OnActionExpandListener() { 
    @Override 
    public boolean onMenuItemActionExpand(MenuItem item) { 
     // do work 
     return true; 
    } 

    @Override 
    public boolean onMenuItemActionCollapse(MenuItem item) { 
     // do work 
     return true; 
    } 
}); 
+0

A proposito, dovrei usare Android Studio (e IntelliJ) e mi dà errori di compilazione su questo ... ma funziona e funziona e va bene ... Ho registrato un bug con AndroidSt audio: https://code.google.com/p/android/issues/detail?id=59692&thanks=59692&ts=1378237307 – xbakesx

5

È necessario assicurarsi di aggiungere la libreria di supporto Android correttamente in Eclipse per rimuovere il seguente errore dal registro 'Impossibile trovare la classe android.support.v7.widget.SearchView $ 5 di riferimento dal metodo android.support.v7.widget.SearchView.addOnLayoutChangeListenerToDropDownAnchorSDK11 '.

La cosa fondamentale da ricordare, non dimenticare di deselezionare Dipendenze Android quando si aggiunge la libreria di supporto perché la v7 appcompat biblioteca offre risorse. Dopo aver apportato le modifiche alle dipendenze nel progetto della libreria di supporto, pulire il progetto della libreria di supporto e il gioco è fatto.

Fare riferimento alla procedura completa nella sezione Adding Libraries with Resources di Google docum ufficiale su come aggiungere librerie di supporto con risorse.

Estratto dal doco sopra si fa riferimento in caso di collegamento cambiamenti in futuro:

  1. Assicurarsi di aver scaricato la libreria di supporto Android utilizzando il SDK Manager.
  2. Creare un progetto di libreria e assicurare la necessaria JAR file sono inclusi nel percorso di generazione del progetto:
    • Selezionare File> Importa.
    • Selezionare Codice Android esistente nell'area di lavoro e fare clic su Avanti.
    • Passare alla directory di installazione dell'SDK e quindi alla cartella Libreria di supporto . Ad esempio, se si aggiunge il progetto appcompat , accedere a/extras/android/support/v7/appcompat /.
    • Fare clic su Fine per importare il progetto. Per il progetto appcompat v7, si dovrebbe ora vedere un nuovo progetto intitolato android-support-v7-appcompat, .
    • Nel nuovo progetto di libreria espandere la cartella libs /, fare clic con il pulsante destro del mouse su ciascun file .jar e selezionare Crea percorso> Aggiungi a percorso di creazione. Ad esempio, durante la creazione del progetto appcompat v7, aggiungere entrambi i file android-support-v4.jar e android-support-v7-appcompat.jar a il percorso di generazione.
    • Fare clic con il tasto destro del mouse sul progetto e selezionare Crea percorso> Configura percorso di creazione. Nella scheda Ordine ed esportazione, controlla i file .jar appena aggiunti al percorso di generazione, in modo che siano disponibili per i progetti che dipendono da questo progetto di libreria. Ad esempio, il progetto appcompat richiede l'esportazione di entrambi i file android-support-v4.jar e android-support-v7-appcompat.jar.
    • Deselezionare le dipendenze di Android.
    • Fare clic su OK per completare le modifiche.
0

è necessario aggiungere mancante libreria di supporto al progetto. In Eclipse: Tasto destro del mouse su Project

Selezionare Strumenti Android/Aggiungi libreria di supporto ...

Problemi correlati