Nous sommes en train de rédiger une application qui a 4 onglets: carte, personnes, endroits, événements. Les gens, les lieux et les événements de l'application apparaissent comme des icônes sur la carte. Par défaut, les onglets Personnes, lieux et événements montrent chacun une liste de répertorie, rendue personnalisée, affichant toutes les personnes, les lieux et les événements respectivement. P>
alt texte http://web6.twitpic.com/img /37202700-F92052DC474B74E1760EDDA1C47F6940.4ADCB134-SCALED.PNG P>
Maintenant, à l'heure actuelle, chacun des onglets a pour contenu une intention définie pour lancer l'activité correspondante. Par exemple, il existe une carte de mapactivité qui étend mapactivité, une valeur ajoutée qui montre les personnes, etc. et ainsi de suite. p>
Je vois un lot de Stackoverflow questions / réponses disant qu'en raison de diverses limitations de la manière dont le Tabhost est configuré, il est préférable de ne pas utiliser les activités comme contenu des onglets. Par exemple, il est impossible de lancer une nouvelle activité et de prendre la place de l'activité existante dans un onglet, alors qu'il est possible de passer une vue avec une vue différente. p>
Maintenant, je suis à la croisée des chemins. Nous avons (pour le meilleur ou pire) consacré à une juste quantité de temps en essayant d'obtenir cette application pour fonctionner comme il est actuellement structuré, avec les activités de contenu des onglets. Lorsqu'une icône correspondant à une personne, à un lieu ou à un événement est cliquée, il tire une vue d'affichage sur une URI correspondant à cet objet; cela est repris par une activité qui montre alors l'objet. Le même mécanisme est au travail à la fois sur la carte et dans les listes individuelles. Nous aimons vraiment le couplage lâche que cela nous fournit; Nous donnons juste une commande de vue et l'URI à la personne / lieu / événement et cela nous amène automatiquement à la bonne activité. Certes, l'activité lancée couvre la vue de tabulation plutôt que d'apparaître à l'intérieur de cela, mais nous étions disposés à vivre avec cela. P>
Voici un problème cependant: de l'activité de spectacle, nous souhaitons pouvoir retourner sur la carte, centrée à cette personne, lieu ou événement. Nous pouvons lancer une nouvelle activité pour montrer à nouveau la carte, mais nous avons maintenant l'activité Carte comme contenu de l'onglet, plus l'activité de spectacle, ainsi que la nouvelle activité de la carte dans la pile d'activités; Compte tenu de la manière dont la ressource intensive l'activité de la carte est, je suppose que ce n'est pas le moyen idéal d'aller. P>
Je suppose que ma question est, y a-t-il un bon tutoriel quelque part montrant exactement comment faire des tâches complexes avec un tabhost? J'ai vu Hellotabwidget ; Je cherche quelque chose de beaucoup plus sophistiqué que cela. Je crains que si nous passions à la manière de faire de la vue, nous devrons faire beaucoup de ménage pour intercepter tous les événements du dos, essayer de développer les vues, etc., etc., ainsi que Couplage fortement notre programme d'une manière que nous ne voulons pas. p>
Toute suggestion d'une voie à suivre serait extrêmement appréciée. Nous sommes nouveaux à Android, nous essayons donc de suivre les meilleures pratiques établies, mais il est difficile lorsque les quelques exemples que nous avons constatés sont trop simplistes pour notre cas d'utilisation. P>
3 Réponses :
Je vois beaucoup de scaleverflow questions / réponses disant qu'en raison de diverses limitations dans la manière dont la Tabhost est configuré, il est préférable de ne pas utiliser activités comme contenu des onglets. p> blockQuote>
comme présidente auto-nommée de l'Alliance anti-activité-TAB (AATA), c'est certainement ma position. P>
Quand une icône correspondant à un Personne, lieu ou événement est cliqué, il incendie une vue de vue sur une uri correspondant à cet objet; c'est ramassé par une activité qui puisse alors montre l'objet. p> blockQuote>
Notez que cela n'a rien à voir avec avoir des activités comme le contenu des onglets. P>
Nous pouvons lancer une nouvelle activité à montrer la carte à nouveau, mais maintenant nous avons la carte activité comme contenu de l'onglet, plus l'activité de spectacle, plus le nouveau activité cartographique dans la pile d'activités; Compte tenu de la ressource intensif de la carte l'activité est, je suppose que ceci n'est pas le moyen idéal d'aller. p> blockQuote>
Je l'éviterais si possible. P>
Je crains que si nous passions à la Vue basée sur la façon de faire des choses, nous allons avoir à faire beaucoup de ménage à intercepter tous les événements du dos, essayez de Sompruez les vues, etc., etc., comme ainsi que de coupler fortement notre programme D'une certaine manière, nous ne voulons pas. P> blockQuote>
Cela ne suit pas du tout de ce que vous avez écrit précédemment. Vos "événements de retour" ne changeront pas une Iota entre utiliser des vues comme contenu des onglets et à l'aide d'activités comme contenu des onglets. De plus, cela n'a rien à voir avec le modèle "couplage lâche" que vous décrivez - en cliquant sur une icône dans une liste dans une affichage dans un onglet n'est pas différent de cliquer sur une icône dans une liste dans une liste dans une activité un onglet. p>
Vous avez simplement votre activité de spectacle, indiquez votre activité principale d'afficher un emplacement particulier, alors l'activité de spectacle peut
finition () code>. Le moyen le plus simple de le faire sans introduire un couplage de JVM dur entre les activités consiste à diffuser une intention code> code> et d'enregistrer un
BroadcastraCeiver code> dans l'activité principale. Dès réception de cette intention code> code>, l'activité principale mettrait à jour la carte et définissez-la pour être l'onglet en cours. Bien entendu, cette approche est plus simple si vous avez l'activité principale, utilisez des vues pour son contenu de tabulation. P>
Maintenant, si vous essayez de rétablir votre application, de telle sorte que la navigation dans un onglet ne lance pas une autre activité, mais conserve plutôt des choses dans sa propre onglet ... c'est une «bouilloire de poisson» de poisson. P >
Ok, je vois votre point que si nous gardons toutes les intentions configurées de la même manière et que l'activité de spectacle est lancée, les événements de retour sont traités exactement les mêmes. Donc, je suppose que la vraie complexité (et la douleur au dos de l'événement) serait si nous étions programmés par programme le contenu des onglets plutôt que de lancer des intentions lancées. Par exemple. L'onglet Personnes qui affiche normalement une liste de personnes est dite de passer à une vue de la personne du spectacle lorsqu'une personne donnée est cliquée sur. Dans ce cas, nous devrions faire face à la pile de vues nous-mêmes?
En outre, comment peut-on avoir une carte à l'intérieur d'un onglet sans avoir une activité comme contenu d'une onglet? Est-ce possible?
W / R / T Votre premier commentaire, oui, vous auriez besoin de faire votre propre gestion de la pile. w / r / t votre deuxième commentaire, oui vous pouvez afaik. Faites que votre activité principale soit une mappeuse plutôt qu'une tabactivité. La seule chose tabactivité que vous pour vous est la configuration d'appel () sur votre tabhost, que vous devrez alors faire vous-même avant d'ajouter des ongspecs. Ensuite, la mapactivité vous donne ce dont vous avez besoin pour mettre la carte dans un onglet. Il est possible qu'il y a des problèmes ici, mais au large du brassard, je pense que cela devrait fonctionner correctement.
C'est une bonne pratique d'avoir une activité et des vues multiples pour vos onglets. Cependant, cela signifie que vous devez faire attention à gérer quel onglet est sélectionné, différents menus et menus contextuels pour chaque vue de tabulation, etc.
Je suppose que ma question est: y a-t-il un Bon tutoriel quelque part montrant exactement comment faire des tâches complexes avec un Tabhost? J'ai vu hellotabwidget; je suis à la recherche de quelque chose de beaucoup plus sophistiqué que cela. P> blockQuote>
J'ai écrit un tutoriel légèrement meilleur sur mon blog qui démontre une liste d'enregistrement et de la carte d'interaction comme des onglets. Voici le lien: onglets Android avec une carte et une liste d'interaction Vues p>
Les bases consistent à avoir une mise en page similaire à celle du tutoriel Hellotabwidget, rendez votre activité s'étendre de la carrière, extrayez le tabhost de XML et assurez-vous d'appeler la configuration () sur le tabhost. Après cela, ajout de vues comme contenu des onglets, des auditeurs d'onglets, etc. p>
Voici un bref point de départ pour la classe: p>
xxx pré> > ... p> p>
Maintenant, c'est une bonne réponse! Merci Josh, tu as sauvé ma journée.
Par exemple, il est impossible de lancer une nouvelle activité et prendre le lieu de l'activité existante dans un onglet, alors qu'il est possible de Sompruez une vue avec un différent vue. p> blockQuote>
Je ne pense pas que ce soit impossible. J'ai expérimenté cette idée et a écrit un blog Article Expliquer ce que j'ai fait. J'inclus un exemple de projet de code à la fin de l'article qui démontre certaines des choses intéressantes que j'ai apprises. P>