2010-11-27 4 views
2

J'ai vu cette question a été répondue plusieurs fois dans laquelle il est suggéré d'utiliser la méthode notifyDataSetChanged() de BaseAdapter.Actualiser l'affichage de la vue lorsque les données sous-jacentes sont modifiées

Existe-t-il un moyen d'actualiser lorsque votre application n'utilise aucune carte? J'ai une application simple où j'utilise quelques activités avec des préférences, et des dispositions relatives avec des vues de texte et des boutons. Pour l'instant, je n'utilise aucun des adaptateurs comme SimpleAdapter ou ArrayAdapter ou CursorAdapter. Il semble que dans mon cas je dois en créer un juste pour utiliser notifyDataSetChanged()? Il n'y a pas de moyen plus facile pour moi?

Répondre

2

On dirait (je peux me tromper, mais il ressemble vraiment) que vous n'attrapez pas le but de ces classes - SimpleAdapter, ArrayAdapter ou CursorAdapter. Ils sont censés fonctionner avec ListView à l'intérieur d'un Activity (ou mieux encore - à l'intérieur d'un ListActivity). Si vous n'utilisez pas ListView alors ces couches sont très probablement inutiles pour vous.

Je suppose que vos données sont conservées d'une manière ou d'une autre (SharedPreferences ou fichier). Donc, si vous démarrez l'une de vos activités, alors il lit simplement les données pour remplir les vues. Dans ce cas, rien de plus n'est nécessaire. Dans le cas où vous avez besoin de recharger des données pour une activité actuellement visible, il suffit de relire les données du stockage persistant et de repeupler les vues.

+0

J'utilise SharedPreferences. J'ai une activité affichant un écran. Je règle une alarme, elle s'éteint, un service démarre et le service lance une boîte de dialogue d'alarme dans une nouvelle activité en haut de l'écran. L'utilisateur clique sur OK pour faire disparaître le dialogue. Quand il disparaît, je suis de retour à l'écran d'origine mais l'écran d'origine reste intact, aucun changement. J'ai juste besoin de changer une chaîne sur l'écran d'origine à cause de ce que l'utilisateur a fait. Je suppose que je devrais juste créer tout l'écran à nouveau? – mlw

+0

@MLW - Ok, voici une approche - dans le 'Activity' vous souhaitez rafraîchir ses vues (l'écran d'origine) vous devez relire les données de SharedPreferences et repeupler les vues dans' Activity.onResume() '. –

+0

Bonne réponse, ça marche, merci. – mlw

0

Si vos données changent et que vous devez actualiser votre vue, comment les données changent-elles réellement? Est-ce dans un fil séparé ou, voulez-vous juste que quelque chose se passe périodiquement (interroger un flux RSS, ou quelque chose)?

0

J'ai eu un problème similaire. J'avais un groupe radio, et chaque bouton radio avait une étiquette. Lorsque l'écran a pivoté, j'ai utilisé une autre disposition avec des boutons radio du groupe radio & avec les mêmes ID. J'appelais setContentView() dans onCreate(): et après rotation, les "anciennes" étiquettes apparaîtraient sur la nouvelle mise en page (bizarre). Lorsque j'ai déplacé setContentView() sur onResume, tout semble mettre à jour ok. Merci à Arhimed pour sa réponse ci-dessus.

Questions connexes