Actualiser ArrayAdapter dynamiquement
J'ai une Activité avec une zone de saisie semi-automatique. Chaque fois que les modifications du texte, je tiens à appeler un service web et remplir le ArrayAdapter avec le new String[] retournée. Cette partie toutes les grandes œuvres, à l'exception de la liste dans l'INTERFACE utilisateur n'est pas en cours d'actualisation lorsqu'il y a toutes les nouvelles valeurs dans le String[] les écoles. La liste d'origine peuplée dans mon onCreate reste toujours.
J'ai lu quelque part j'avais besoin de le mettre à jour sur le même thread de l'INTERFACE utilisateur est en cours d'exécution, donc j'ai essayé de l'Exécutable énumérés dans mon code ci-dessous. Mais que, ainsi que la mise à jour de ma variable de classe des écoles de ne pas travailler aux côtés de notifyOnDataSetChange()
Où vais-je tort?
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
schools = SchoolProxy.search("Co");
autoCompleteAdapter = new ArrayAdapter(this,android.R.layout.simple_dropdown_item_1line, schools);
autoComplete = (AutoCompleteTextView) findViewById(R.id.edit);
autoComplete.addTextChangedListener(textChecker);
autoComplete.setAdapter(autoCompleteAdapter);
}
...
....
...
final TextWatcher textChecker = new TextWatcher() {
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)
{
schools = SchoolProxy.search(s.toString());
runOnUiThread(updateAdapter);
}
};
private Runnable updateAdapter = new Runnable() {
public void run() {
autoCompleteAdapter.notifyDataSetChanged();
}
};
Comme moins importante note de côté, si chaque élément dans les écoles a un nom \n ville,de l'état. Est-il possible d'avoir la ville & état sur une deuxième ligne à l'intérieur de l'auto de la liste déroulante? Juste pour des raisons de formatage. Aurait l'air plus propre si je le pouvais.
Merci!
OriginalL'auteur Nathan | 2009-12-28
Vous devez vous connecter pour publier un commentaire.
Avez-vous essayé le
setNotifyOnChange(true)
? Il est censé bien faire ce que vous faites manuellement chaque fois que vous utilisez des méthodes qui changent la liste(add(T), insert(T, int), remove(T), clear())
. Vous avez peut-être modifier le tableau par le biais de ces méthodes sur laArrayAdapter
?Je ne suis pas sûr si le
ArrayAdapter
est effectivement la référence à des écoles ou tout simplement de copier le contenu lors de la construction de laArrayAdapter
. Peut-être vous pouvez prendre un coup d'oeil à l'AFST code pour voir ce qu'ils font dans ce constructeur.Je vais aller de l'avant et suppose que j'ai besoin de clear() puis à utiliser la méthode add() ou insert(). J'ai eu les données de configuration comme une Chaîne de caractères[]. Mais je vais expérimenter avec simplement retourner comme un JSONArray et faire une boucle. Similaire à: écoles = SchoolProxy.recherche(s).toString()); for (int i = 0; i < les écoles.longueur; i++) { autoCompleteAdapter.ajouter(écoles[i]); }
OriginalL'auteur GrkEngineer
Après vous de modifier dynamiquement la carte, juste besoin d'appeler:
OriginalL'auteur Damir