2010-11-14 24 views
1

J'ai une activité qui est une vue OpenGL. J'ai aussi une mise en page xml à utiliser pour les préférences. Jusqu'à présent, pour afficher le menu de préférences, je l'ai juste amené à l'avant par setContentView(). Et le même pour revenir à la vue OpenGL.Quand utiliser plus d'activités

Mais est-ce un cas où je devrais donner au menu de préférences sa propre activité? Je suppose que cela rendrait certaines choses beaucoup plus faciles. Par exemple, le bouton de retour fonctionnerait simplement, par opposition à maintenant où je dois le coder ou il quittera simplement l'application.

Et si c'est une bonne idée, comment puis-je transmettre des données dans les deux sens? J'ai une classe qui stocke toutes les préférences. Puis-je l'envoyer à l'activité et revenir? Ou est le meilleur moyen de stocker les préférences dans une base de données sqlite et ensuite l'utiliser pour transmettre des données?

Répondre

1

Je trouve plus facile de séparer les menus et autres dans des activités séparées (sauf si vous utilisez des boîtes de dialogue, etc ..) En ce qui concerne le stockage de données, vous pouvez le faire de plusieurs façons:

  1. Database
  2. StoredPreferences
  3. extras intention avec putExtra/Bundle
  4. Création d'une sous-classe d'applications et le stockage des préférences, il

Chacun a son mérite. 4 est assez facile car il vous suffit d'indiquer le nom de la classe d'application dans votre manifeste, puis appelez: App MyAppClass = (MyAppClass) getApplicationContext(); et vous pouvez ensuite utiliser toutes les variables dans MyAppClass via l'application. 2 est également simple.

+0

Je pense que 3. est la seule option viable. Il ne faut pas utiliser le stockage global pour transmettre des données entre les activités. –

+0

Merci! Je pense que je vais aller pour le numéro 2. Je n'ai pas seulement besoin de transmettre des données entre les activités, mais aussi de les stocker entre les sessions. – Espen

+0

@Peter Kengo 4 est ainsi. Pour un jeu, il est logique d'avoir une sous-classe d'application qui peut être instanciée à partir d'Android. Il gère ce natif de sorte qu'il serait plus rapide qu'un bundle/extras d'intention. La plupart du temps, les objets du jeu sont complexes, donc les décomposer en natifs n'est pas toujours une option, d'autant plus qu'un jeu peut contenir une tonne de variables pertinentes qui peuvent être nécessaires dans les sous-activités. – methodin

1

Vous avez déjà souligné la principale différence: la gestion de l'historique.

Vous pouvez transmettre des données à l'activité via Intentions putExtra()/getExtra():

  1. Créer un et ajouter des données intention personnalisées via Intent.putExtra(..)
  2. Démarrer la nouvelle activité: startActivityForResult(intent).
  3. A l'intérieur de la nouvelle activité, vous pouvez obtenir des données supplémentaires avec intent.getXyzExtra() (où xyz est de type). Lorsque la nouvelle activité est terminée, appelez setResult(int, resultIntent). Encore une fois, vous pouvez ajouter des données supplémentaires comme décrit dans 1.
  4. Appelez finish() pour mettre fin à l'activité.
  5. En original La méthode d'activité onActivityResult sera appelée. Encore une fois extraire les données de l'intention comme décrit dans 3.