2010-05-18 2 views
3

J'ai une activité de préférences où je peux changer la langue et le thème de mon application. De là, je retourne à l'activité précédente via la touche Retour, et je veux recréer l'activité.Est-ce que onSaveInstanceState doit enregistrer le "enabledness" des vues?

J'ai réussi à le faire en réinitialisant la disposition en onResume et en appelant également onRestoreInstanceState à partir de là. Toutes les vues sont restaurées correctement, avec des cases à cocher si nécessaire, des édits remplis de textes que j'ai laissés là auparavant.

Mais j'ai également un bouton qui est initialement désactivé, et devient activé seulement quand un bouton radio est vérifié. Le problème est le suivant: je vérifie le bouton radio, le bouton est activé. Ensuite, je vais dans les paramètres, change le thème et retourne à la première activité. Quand j'y arrive, le radiobutton est restauré comme vérifié, mais le bouton est désactivé.

Il semble donc que l'état activé/désactivé n'est pas enregistré dans l'ensemble, ce qui semble contre-intuitif. Et je n'ai pas trouvé de code dans la source Android qui fait cela aussi. Ai-je manqué quelque chose, ou dois-je écrire mon propre code pour cela?

EDIT: BTW, l'état est sauvegardé uniquement pour les vues qui ont des identifiants. Et ce bouton en a un, je le garantis :)

Répondre

0

La clé ici est de voir ce qui active réellement le bouton et de s'assurer qu'il est cohérent à chaque accès à l'application.

À partir de votre déclaration:

Mais j'ai aussi un bouton qui est initialement désactivé et devient activé que lorsqu'un bouton radio est cochée.

Il semble que vous ayez un écouteur sur le radiobutton qui active le bouton. De là, je comprends que le bouton est initialement désactivé, ce qui signifie que vous devrez le changer chaque fois que vous exécutez l'activité.

Vos options sont les suivantes:

  • Avez-RadioButton établi une sorte de préférence globale qui est vérifiée dans onResume, ce qui permet le bouton si nécessaire
  • Lorsque le bouton radio est cochée, modifiez les paramètres globaux (ou peut-être les paramètres de l'interface graphique) à celui dans lequel le bouton est activé. Cela peut rester indéfiniment jusqu'à ce que le radiobutton soit à nouveau désactivé.
  • Sauvegarde du enabledness en onSaveInstanceState que vous mentionnez

Il est difficile de dire qui est le plus approprié parce que vous ne l'avez pas mentionné le contexte du cas d'utilisation, mais je voudrais éviter de l'envoyer par dans le paquet à moins que c'est une activité très occasionnellement utilisée. Il est très logique de suivre le réglage du radiobutton en le stockant ou en changeant la vue jusqu'à nouvel ordre.

0

Le plus simple est d'activer votre bouton dans onResume si le bouton radio est coché.

Modifier: PreferenceGroup peut gérer les dépendances entre les vues, mais il a besoin de l'activité à une sous-classe de PreferenceActivity.

+0

Bien sûr que oui, mais j'ai beaucoup d'activités avec un comportement similaire, et j'aimerais avoir une solution kill-em-all. Voyons voir si des idées surgissent. –

Questions connexes