2012-09-17 2 views
2

J'ai remarqué qu'il n'y a pas de solution de travail qui montre comment utiliser le filtre sur une listeVoir les éléments en utilisant la barre d'action, qui fonctionne sur les anciennes versions Android (2.3 .X).Utilisation de l'aspect natif de la searchView pour actionBarSherlock sur les anciennes versions d'Android

Le seul exemple que j'ai trouvé se trouve dans le fichier "LoaderCursorSupport.java" de l'exemple de fragments. Cependant, il ne fonctionne que lorsque le SearchView peut être créé, ce qui signifie à partir de Android 3.x, comme indiqué dans le code:

View searchView=SearchViewCompat.newSearchView(getActivity()); 
if(searchView!=null) 
...  

Le bug ci-dessus (ou fonctionnalité manquante, de quelque façon que vous regardez) existez encore même sur version 4.2 de l'actionBarSherlock. J'ai donc créé ma propre solution, qui fonctionne très bien (et j'aimerais que la bibliothèque officielle y ajoute ma solution), mais je ne sais pas où trouver le bouton "x" dans la vue editText c'est responsable de l'effacement du texte.

Quelqu'un peut-il s'il vous plaît me dire comment obtenir l'aspect natif et le mettre correctement dans le code?

Voici une capture d'écran de ce que je parle:

searchView on new Android versions

Pour ceux qui souhaitent utiliser cette fonction, voici mon extrait de code:

@Override 
public boolean onCreateOptionsMenu(final com.actionbarsherlock.view.Menu menu) 
    { 
    getSupportMenuInflater().inflate(R.menu.activity_main,menu); 
    _searchMenuItem=menu.findItem(R.id.menu_item_action_search); 
    View searchView=SearchViewCompat.newSearchView(this); 
    if(searchView!=null) 
    SearchViewCompat.setOnQueryTextListener(searchView,new OnQueryTextListenerCompat() 
     { 
     @Override 
     public boolean onQueryTextChange(final String newText) 
      { 
      _listAdapter.getFilter().filter(newText); 
      return true; 
      } 

     @Override 
     public boolean onQueryTextSubmit(final String query) 
      { 
      return super.onQueryTextSubmit(query); 
      } 
     }); 
    else 
    { 
    searchView=new EditText(this); 
    searchView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT)); 
    ((EditText)searchView).setHint(R.string.search); 
    ((EditText)searchView).addTextChangedListener(new TextWatcher() 
     { 
     String curretTextToFilter =null; 

     @Override 
     public void onTextChanged(final CharSequence newText,final int start,final int before,final int count) 
      { 
      if(newText==curretTextToFilter) 
      return; 
      curretTextToFilter=newText.toString(); 
      _listAdapter.getFilter().filter(curretTextToFilter==null||curretTextToFilter.length()==0 ? null : curretTextToFilter); 
      } 

     @Override 
     public void beforeTextChanged(final CharSequence s,final int start,final int count,final int after) 
      {} 

     @Override 
     public void afterTextChanged(final Editable s) 
      {} 
     }); 
    } 
    final View finalSearchView=searchView; 
    _searchMenuItem.setOnActionExpandListener(new OnActionExpandListener() 
    { 
     @Override 
     public boolean onMenuItemActionExpand(final MenuItem item) 
     { 
     if(finalSearchView instanceof EditText) 
      { 
      final InputMethodManager m=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
      finalSearchView.requestFocus(); 
      if(m!=null) 
      m.toggleSoftInput(0,InputMethodManager.SHOW_IMPLICIT); 
      } 
     return true; 
     } 

     @Override 
     public boolean onMenuItemActionCollapse(final MenuItem item) 
     { 
     if(finalSearchView instanceof EditText) 
      ((EditText)finalSearchView).setText(null); 
     else _listAdapter.getFilter().filter(null); 
     return true; 
     } 
    }); 
    _searchMenuItem.setActionView(searchView); 
    // 
    return true; 
    } 

@Override 
public boolean onKeyUp(final int keyCode,final KeyEvent event) 
    { 
    if(keyCode==KeyEvent.KEYCODE_SEARCH) 
    { 
    _searchMenuItem.expandActionView(); 
    return true; 
    } 
    return super.onKeyUp(keyCode,event); 
    } 
+0

La branche 'dev' a' SearchView'. –

+0

mais je l'ai essayé et cela ne fonctionne pas sur l'émulateur avec la version 2.3.x - appuyer sur l'élément de recherche ne fait rien. n'est pas le dernier dev build 4.2 comme je l'ai mentionné? –

+0

@JakeWharton Je pense qu'ils l'ont mis à jour depuis que je l'ai essayé. maintenant ça marche, mais ça ne permet toujours pas d'avoir le même style (et le bouton X). –

Répondre

0

A l'exception du « X "bouton, je pense que le reste peut être fait en utilisant une bibliothèque avec un thème, appelé HoloEverywhere.

Questions connexes