2013-01-01 6 views
0

J'ai actuellement la version 4.2.0 d'ActionbarSherlock implémentée dans une application Android. Et j'ai un problème avec le widget SearchView.ClassNotFoundException avec ActionbarSherlock SearchView

J'ai actuellement le widget mis en œuvre comme ceci:

import com.actionbarsherlock.app.ActionBar.Tab; 
import com.actionbarsherlock.app.SherlockFragmentActivity; 
import com.actionbarsherlock.view.Menu; 
import com.actionbarsherlock.view.MenuItem; 
import com.actionbarsherlock.widget.SearchView; 
import com.actionbarsherlock.widget.SearchView.OnQueryTextListener; 

public class MainActivity extends SherlockFragmentActivity 
{ 

    /*...*/ 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     SearchView searchView = new SearchView(getSupportActionBar().getThemedContext()); 
     searchView.setQueryHint(getResources().getString(R.string.searchHint_Label)); 
     searchView.setIconifiedByDefault(true); 
     searchView.setOnQueryTextListener(new OnQueryTextListener(){ 

      @Override 
      public boolean onQueryTextSubmit(String query) { 
       // Do stuff 
      } 

      @Override 
      public boolean onQueryTextChange(String newText) { 
       // TODO Auto-generated method stub 
       return false; 
      } 

     }); 

     menu.add("Search") 
      .setIcon(R.drawable.abs__ic_search) 
      .setActionView(searchView) 
      .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); 

     return true; 
    } 
} 

Maintenant, chaque fois que je commence débogage de l'application que je reçois l'erreur suivante au constructeur de la SearchView:

01-01 11:46:40.365: E/dalvikvm(1385): Could not find class 'com.actionbarsherlock.widget.SearchView$11', referenced from method com.actionbarsherlock.widget.SearchView.<init> 
Call Stack: 
Thread [<1> main] (Suspended (exception ClassNotFoundException))  
    <VM does not provide monitor information> 
    PathClassLoader.findClass(String) line: 240 
    PathClassLoader(ClassLoader).loadClass(String, boolean) line: 551 
    PathClassLoader(ClassLoader).loadClass(String) line: 511  
    DexFile.defineClass(String, ClassLoader, int, ProtectionDomain) line: not available [native method] 
    DexFile.loadClassBinaryName(String, ClassLoader) line: 207 
    PathClassLoader.findClass(String) line: 200 
    PathClassLoader(ClassLoader).loadClass(String, boolean) line: 551 
    PathClassLoader(ClassLoader).loadClass(String) line: 511  
    MainActivity.onCreateOptionsMenu(Menu) line: 124  
    MainActivity(Watson).onCreatePanelMenu(int, Menu) line: 45 
    ActionBarSherlockCompat(ActionBarSherlock).callbackCreateOptionsMenu(Menu) line: 559  
    ActionBarSherlockCompat.preparePanel() line: 479  
    ActionBarSherlockCompat.dispatchInvalidateOptionsMenu() line: 272 
    ActionBarSherlockCompat$1.run() line: 984 
    ViewRoot(Handler).handleCallback(Message) line: 587 
    ViewRoot(Handler).dispatchMessage(Message) line: 92 
    Looper.loop() line: 130 
    ActivityThread.main(String[]) line: 3683  
    Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method] 
    Method.invoke(Object, Object...) line: 507 
    ZygoteInit$MethodAndArgsCaller.run() line: 839 
    ZygoteInit.main(String[]) line: 597 
    NativeStart.main(String[]) line: not available [native method] 

Cette erreur se produit au sein de toutes les versions Android que je supporte avec l'application (2.2 - 4.2) Lorsque je relance le débogage après que cette exception se soit produite, l'application tourne bien et le SearchView marche bien, mais je me demande toujours pourquoi cette exception se produit.

Répondre

0

S'il vous plaît utiliser cette méthode de créer le menu dans Xml:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" >  
<item 
    android:id="@+id/search"  
    android:icon="@drawable/abs__ic_search"  
    android:showAsAction="add here your action" 
    android:title="@string/search"> 
</item> 
</menu> 

ajouter ce code dans votre activité

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getSupportMenuInflater(); 
    inflater.inflate(R.menu.menu, menu); 
    return true; 
} 



@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.search: 
     add code here 
     return true; 
    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 
+0

J'ai essayé de déplacer la définition de menu XML comme vous le suggérez, mais il n'a pas Résolvez l'exception. L'exception se produit toujours à 'inflater.inflate' –

+0

ce qui fait problème dans inflater.inflate? –

+0

s'il vous plaît vérifier votre activité cette importation com.actionbarsherlock.view.MenuInflater restent –

Questions connexes