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:
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);
}
La branche 'dev' a' SearchView'. –
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é? –
@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). –