La meilleure Façon de Rafraîchir Adaptateur/ListView sur Android
Mon livre, "Bonjour Android" donne cela comme un moyen de l'aide personnalisée db helper, l'établissement d'un curseur, puis la configuration d'un adaptateur comme suit:
Cursor cursor
CustomDatabaseHelper test = new CustomDatabaseHelper(this);
try {
cursor = getData();
showData(cursor);
} finally {
test.close();
}
Avec cela, cependant, chaque fois que j'ai besoin de rafraîchir l'ensemble de données, j'ai besoin de garder l'exécution de ce bloc de code (qui est un peu difficile à l'intérieur d'un onClick() pour un bouton en raison de "ce" n'est pas disponible.
Est-ce la meilleure façon de rafraîchir l'ensemble de données, ou dois-je regarder pour supprimer les .fermer et d'émettre une carte.notifyDataSetChanged()? Si je fais cela, j'ai parfois de la force de près (et je ne me souviens pas en ce moment), mais parfois il ne peut pas Supprimer correctement - je pense que cela peut-être parce que la base de données est actuellement ouvert et il essaie de l'ouvrir à nouveau.
Doit-on être de déclarer les variables pour les Curseurs, DatabaseHelpers et de l'Adaptateur dans la Classe (en dehors de la OnCreate) afin qu'ils soient accessibles à toutes les fonctions?
Je sais que c'est juste de la mauvaise programmation, à ce stade, mais Im essayant d'obtenir quelques conseils quant à la meilleure façon de faire les choses.
- Juste une note: les Choses sont un peu différentes si vous utilisez les fournisseurs de contenu et LoaderManager. Voir: stackoverflow.com/a/19657500/1087411
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser
adaptateur.notifyDataSetChanged()
. Ce qui ne l'journaux dit quand vous l'utiliser?Simplement ajouter ces codes avant de
Adapter
ça fonctionne pour moi:Ou Directement, vous pouvez utiliser la méthode ci-dessous après le changement de Données de ressources.
Pas seulement l'appel notifyDataSetChanged() permettra d'actualiser la liste de données,
setAdapter()
doit être appelée avant de charger correctement l'information:Code suivant fonctionne parfaitement pour moi
Si rien ne fonctionne, il suffit de créer l'instance de l'adaptateur de nouveau avec la nouvelle série de résultats ou de la mise à jour du jeu de résultats. Ensuite, vous pouvez voir le nouveau point de vue.
Si vous utilisez LoaderManager essayez avec cette déclaration:
Peut-être leur problème, c'est le moment où la recherche est effectuée dans la base de données. Dans son Fragment de Remplacer les cycles de ses Fragment.java pour comprendre simplement: essayer de tester avec les méthodes:
Essayer de même mettre
Log.i
... "démarrage" et "onResume".Finalement coupé le code dans "onCreate" e mettre dans "démarrage", par exemple:
Il suffit d'écrire dans votre Personnalisé
ArrayAdaper
ce code:il suffit d'écrire dans votre Personnalisé ArrayAdaper ce code: