74 votes

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.

104voto

Macarse Points 36519

Vous devez utiliser adapter.notifyDataSetChanged(). Ce qui ne l'journaux dit quand vous l'utiliser?

17voto

sravan Points 2403

Ajoutez simplement ces code avant de fixer Adapter ça fonctionne pour moi:

    listView.destroyDrawingCache();
    listView.setVisibility(ListView.INVISIBLE);
    listView.setVisibility(ListView.VISIBLE);

Ou Directement, vous pouvez utiliser la méthode ci-dessous après le changement de Données de ressources.

   adapter.notifyDataSetChanged()

12voto

Hims Points 123

Code suivant fonctionne parfaitement pour moi

EfficientAdapter adp = (EfficientAdapter) QuickList.getAdapter();
adp.UpdateDataList(EfficientAdapter.MY_DATA);
adp.notifyDataSetChanged();
QuickList.invalidateViews();
QuickList.scrollBy(0, 0);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X