Ho avuto lo stesso problema e finire con la seguente soluzione: personalizzato SearchView
+ OnQueryTextListener.onQueryTextChange
personalizzato SearchView:
public class MySearchView extends SearchView {
private boolean expanded;
public MySearchView(Context context) {
super(context);
}
@Override
public void onActionViewExpanded() {
super.onActionViewExpanded();
expanded = true;
}
@Override
public void onActionViewCollapsed() {
super.onActionViewCollapsed();
expanded = false;
}
public boolean isExpanded() {
return expanded;
}
}
Creazione azione e l'impostazione di richiamata:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
searchAction = menu.add(0, SEARCH_ACTION_ID, 0 , getString(R.string.action_search));
searchAction.setShowAsAction(SHOW_AS_ACTION_ALWAYS | SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
searchView = new MySearchView(getSherlockActivity());
searchView.setOnQueryTextListener(searchQueryListener);
searchView.setIconifiedByDefault(true);
searchAction.setActionView(searchView);
}
E ultimo l'ascoltatore:
private OnQueryTextListener searchQueryListener = new OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
search(query);
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
if (searchView.isExpanded() && TextUtils.isEmpty(newText)) {
search("");
}
return true;
}
public void search(String query) {
// reset loader, swap cursor, etc.
}
};
Testato su ABS 4.3.
fonte
2013-10-29 22:42:11
Grazie per le informazioni e la ricerca nel codice sorgente. Credo che l'OnQueryTextSubmit debba essere attivato anche se il testo della query è vuoto per consentirci di cancellare il filtro di ricerca e visualizzare di nuovo l'intero elenco non filtrato. Anche se inseguo il testo della query tramite l'evento OnQueryTextChange, il problema si verifica quando il testo della ricerca diventa vuoto. Nessun evento è stato licenziato. Dovrei mettere un'altra voce di menu nella barra delle azioni solo per visualizzare di nuovo l'intero elenco non filtrato. – tborja
Suggerisco che quando OnQueryTextChange ti informa che la ricerca di EditText è vuota, cancelli manualmente il filtro. Sono d'accordo nel cercare di chiamare 'onSubmitQuery()' con una stringa vuota in qualsiasi modo, semplicemente non funzionerà. – Sam
In alcuni casi non si desidera eseguire il filtraggio immediato (sul cambio di testo), poiché l'elenco dei suggerimenti lo sta già facendo. Quindi si filtra la lista reale solo al clic di ricerca. E poi è necessario che l'utente abbia la possibilità di cancellare questa ricerca. Quindi sì, penso anche che questo controllo sia un bug. – Ixx