En fait, je n'aime pas l'approche où vous dupliquez votre liste d'origine. Cela prend du temps et de la mémoire. J'ai pris l'approche de juste faire les éléments désirés VISIBLE et les éléments indésirables GONE. Mon exemple est pour un TableLayout où je filtre les TableRows, chacun a un TextView.
public void filter(TableLayout tl, String regex) {
TableRow tr;
TextView tv;
Pattern p;
Matcher m;
p = Pattern.compile(regex);
int n = tl.getChildCount();
for(int i = 0; i < n; i++) {
tr = (TableRow) tl.getChildAt(i);
tv = (TextView) tr.getChildAt(0);
m = p.matcher(tv.getText());
if(m.find()) {
tr.setVisibility(View.VISIBLE);
} else {
tr.setVisibility(View.GONE);
}
}
Je ne suis pas le profil, mais je suis tout à fait sûr qu'il est plus rapide que la copie de tous les éléments d'une liste, puis filtrer et puis afficher la nouvelle liste.
L'avantage devrait être plus perceptible à mesure que votre liste s'agrandit. Mais, une mise en garde, je dois avouer que bien qu'il fonctionne très bien en filtrant quelques centaines de lignes, je suis préoccupé par ce qui se passe quand le nombre de lignes est si grand qu'il faut plus de 5 secondes pour faire le filtrage . Il devrait ensuite déclencher le dialogue de l'application ne répond pas.
J'ai essayé de faire un fil, mais parce que je traite directement de la visibilité des vues, je reçois un message d'erreur que seul le fil d'origine peut toucher les vues. Je travaille dessus et je suis sûr que je trouverai une solution.
possible de duper http://stackoverflow.com/questions/2519317/how-to-write-a-custom-filter-for-listview-with-arrayadapter – Femi
Jetez un oeil à la réponse ici http://stackoverflow.com/questions/6492214/custom-filtering-arrayadapter-in-listview – Naruto
Je suis la réponse à mon problème, ici il est http://stackoverflow.com/questions/6492214/custom-filtering- arrayadapter-in-listview – Naruto