Je suis en train de déterminer le meilleur moyen d’avoir un seul listview contient des styles de lignes différentes. Je sais comment faire pour créer une ligne personnalisée + adaptateur tableau personnalisé pour soutenir une ligne personnalisée pour l’affichage de la liste entière. Mais comment peut un listview prend en charge plusieurs styles de ligne différentes ?
Réponses
Trop de publicités?Puisque vous savez combien de types de mise en page qui vous serait - il possible d'utiliser ces méthodes.
getViewTypeCount()
- cette méthode retourne les informations combien de types de lignes que vous avez dans votre liste
getItemViewType(int position)
- retourne des informations de mise en page type, vous devez utiliser en fonction de la position
Ensuite, vous exagérez la mise en page uniquement si elle est null et de déterminer le type à l'aide d' getItemViewType
.
Regardez ce tutoriel pour plus d'informations.
Pour réaliser des optimisations dans la structure que vous avez décrit dans le commentaire que je vous suggère:
- Le stockage de vues d'objets appelés
ViewHolder
. Il serait d'augmenter la vitesse, car vous n'aurez pas à appelerfindViewById()
tous les temps, engetView
méthode. Voir List14 de l'API de démos. - Créer un générique de mise en page qui sera conforme à toutes les combinaisons de propriétés et de cacher certains éléments si la position actuelle ne l'a pas.
J'espère que cela va vous aider. Si vous pouvez fournir certaines XML talon avec la structure de données et de l'information exactement comment vous souhaitez la carte en ligne, je serais en mesure de vous donner plus de précision conseiller. Par pixel.
Je sais comment créer une ligne personnalisée + coutume adaptateur tableau à l'appui d'une ligne personnalisée pour l'ensemble de l'affichage de la liste. Mais comment peut-on listview soutenir une multitude de lignes de styles?
Vous connaissez déjà les bases. Vous avez juste besoin d'obtenir votre coutume adaptateur pour retourner un autre modèle/vue en fonction de la ligne du curseur ou de l'information fournie.
Un
ListView
peut prendre en charge plusieurs ligne styles, car il découle de l' AdapterView:Un AdapterView est une vue dont les enfants sont déterminés par un Adaptateur.
Si vous regardez la Carte, vous verrez méthodes qui compte pour l'utilisation de lignes de vues:
abstract int getViewTypeCount() // Returns the number of types of Views that will be created ... abstract int getItemViewType(int position) // Get the type of View that will be created ... abstract View getView(int position, View convertView, ViewGroup parent) // Get a View that displays the data ...
Les deux dernières méthodes fournissent la position de sorte que vous pouvez utiliser pour déterminer le type de vue que vous devez utiliser pour cette ligne.
Bien sûr, vous n'avez généralement pas utiliser AdapterView et l'Adaptateur directement, mais plutôt d'utiliser ou de dériver de l'un de leurs sous-classes. Les sous-classes de la Carte peut ajouter des fonctionnalités supplémentaires qui changent de la façon d'obtenir des mises en page personnalisées pour des lignes différentes. Depuis la vue utilisée pour une ligne donnée est alimentée par l'adaptateur, l'astuce est d'avoir la carte pour revenir à la vue souhaitée pour une ligne donnée. Comment faire cela diffère en fonction de l'adaptateur spécifique.
Par exemple, pour utiliser ArrayAdapter,
- remplacer
getView()
à gonfler, remplir et retourner à la vue souhaitée pour la position donnée. L'getView()
méthode inclut la possibilité de réutiliser les opinions par l'convertView
paramètre.Mais à l'utilisation des dérivés de CursorAdapter,
- remplacer
newView()
à gonfler, remplir et retourner à la vue souhaitée pour le curseur de l'état (c'est à dire la "ligne") [vous devez également remplacerbindView
alors que le widget peut réutiliser vues]Toutefois, pour utiliser SimpleCursorAdapter,
- définir un
SimpleCursorAdapter.ViewBinder
avec unsetViewValue()
méthode pour gonfler, remplir et retourner à la vue souhaitée pour une ligne donnée (actuelle du curseur de l'état) et les données de la colonne "de". La méthode peut définir le "spécial" points de vue et de reporter à SimpleCursorAdapter du comportement standard pour le "normal" liaisons.Regardez les exemples/tutoriels pour le type de carte que vous utilisez en fin de compte.
Dans votre tableau personnalisé adaptateur, vous remplacez la getView() la méthode, comme vous l'avez sans doute familier avec. Alors tout ce que vous avez à faire est d'utiliser un commutateur instruction ou une instruction if pour revenir à un certain Affichage personnalisé en fonction de la position de l'argument passé à la méthode getView. Android est intelligent en ce qu'elle ne fera que vous donner un convertView du type approprié pour votre poste/ligne; vous n'avez pas besoin de vérifier qu'il est du type correct. Vous pouvez aider à Android avec ce en remplaçant la getItemViewType() et getViewTypeCount() les méthodes de façon appropriée.
Si nous avons besoin afin de montrer les différents type d'affichage dans la liste de la vue et de son bon usage de getViewTypeCount() et getItemViewType() dans l'adaptateur à la place de la bascule d'un affichage.DISPARU et la VUE.VISIBLE peut être très cher à l'intérieur de getView() qui aura une incidence sur la liste de défilement.
Veuillez vérifier celui-ci pour l'utilisation de getViewTypeCount() et getItemViewType() dans l'Adaptateur.