Tri ArrayAdapter pour Android
J'ai un MultiAutoCompleteTextView qui vous permet d'entrer dans les entrées multiples et vous montre les suggestions de saisie semi-automatique. Mon problème survient lorsque je présente mes données. Je suis ajoutant toutes les entrées des chaînes de la liste déroulante, mais mes tentatives pour trier les données d'échouer. Le code qui s'exécute sur soumettre:
final private Comparator<String> comp = new Comparator<String>() {
public int compare(String e1, String e2) {
return e1.toString().compareTo(e2.toString());
}
};
((ArrayAdapter<String>) autoCompleteView.getAdapter()).add(getString());
((ArrayAdapter<String>) autoCompleteView.getAdapter()).sort(comp);
Le code de ce qui se passe en cliquant sur le autoCompleteView:
view.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
adapter.getFilter().filter(null);
//adapter.sort(comp);
view.showDropDown();
}
});
N'importe qui peut trouver quelque chose de mal avec ce que je fais?
EDIT: quelques infos, après incorporant les modifications de @Sam
private ArrayList<String> array = new ArrayList<String>();
private ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line,
array);
private void setUpAutoComplete(final MultiAutoCompleteTextView view)
{
array.add("test string"); //this is successfully added to the drop down list
Collections.sort(array, comp);
adapter.notifyDataSetChanged();
}
private void onSubmit()
{
array.add(getString()); //this fails to add
adapter.notifyDataSetChanged();
}
OriginalL'auteur Flash | 2012-07-16
Vous devez vous connecter pour publier un commentaire.
C'est un peu vague. Mais je vais faire une supposition.
Tout d'abord vous faire quelque chose de redondant:
Depuis
e1
ete2
sont déjà des Chaînes vous n'avez pas besoin d'appelerString#toString()
. Aussi cette Chaîne de base de comparaison existe déjà. Si vous n'avez pas besoin de tout cela.Une meilleure technique est de trier la Liste, pas la carte. Utilisez simplement les Collections de la " méthode de tri:
Avis j'ai changé
adapter.add()
àlist.add()
. J'ai fait cela caradapter.add()
appelslist.add()
etadapter.notifyDataSetChanged()
mais la carte ne devrait pas être mis à jour jusqu'à ce que après la nouvelle liste est triée.Je ne vois pas où vous êtes à l'aide de threads ou de l'ensemble du contexte, donc je ne suis pas certain...
Ok, qu'est-ce que getString()?
Avez-vous vérifié que onSubmit() est appelée?
Merci @Sam. S'avère que j'ai juste eu à recréer l'adaptateur et de le réaffecter à l'affichage après la mise à jour du tableau à l'aide de votre solution.
OriginalL'auteur Sam