2010-10-25 4 views
1

J'ai un problème avec un filtre sur ma listview. En fait cela marche plutôt bien avec un IndexAdapter, mais pas avec un SimpleCursorAdapter.Filtre de texte: comportement étrange avec SimpleCursorAdapter

Dans l'exemple suivant, si isCursor == false, le filtre fonctionne plutôt bien mais s'il est == vrai, le filtre ne fonctionne pas! Par ailleurs, l'adaptateur fonctionne plutôt bien. Je ne comprends vraiment pas où le problème pourrait survenir. Pour plus d'informations, mon FilterTextWatcher est:

public class FilterTextWatcherCursor implements TextWatcher { 

private SimpleCursorAdapter adapter; 

public FilterTextWatcherCursor(SimpleCursorAdapter adapter) { 
    this.adapter = adapter; 
} 

public void afterTextChanged(Editable s) { 
} 

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

public void onTextChanged(CharSequence s, int start, int before, 
    int count) { 
    adapter.getFilter().filter(s); 
} 

} 

FilterTextWatcher est tout à fait le même, mais je l'ai remplacé SimpleCursorAdapter avec IndexAdapter

Merci beaucoup pour toute aide ...

+0

Je viens de trouver une question similaire, mais je ne comprends pas la réponse http: //stackoverflow.com/questions/2002607/android-how-to-text-filter-a-listview -based-on-a-simplecursoradapter –

Répondre

2

Je pense que vous devriez utiliser la FilterQueryProvider au lieu de TextWatcher. Le code suivant fonctionne très bien

class XXX extends Activty 


class TextQuery implements FilterQueryProvider { 
    @Override 
    public Cursor runQuery(CharSequence arg0) { 
    .... build a new select and provide a cursor 
    return cursor; 
    } 
} 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
TextQuery textQuery = new TextQuery(); 
simpleAdapter.setFilterQueryProvider(textQuery); 
} 
+1

Celui-ci fonctionne très bien !! Merci beaucoup. – Noufal