2010-04-04 4 views
0

J'ai un RelativeLayout avec différents éléments. Je prévoyais d'avoir deux ListViews dessus, mais j'ai remarqué qu'il y avait quelques problèmes avec le défilement. Étant donné que chaque ListView affiche seulement un maximum de 5 lignes dois-je essayer de faire une sorte d'adaptateur personnalisé pour fusionner ces ListViews? Ou est-il préférable de remplacer le ListView avec un LinearLayout/RelativeLayout et ajouter les lignes que je les obtiens manuellement? (comme la première réponse ici: android listview display all available items without scroll with static header).Devrais-je utiliser plusieurs ListViews?

Quelle devrait être la bonne façon de procéder? ou y a-t-il un autre moyen? En outre, chaque ligne aura un OnClickListener.

Répondre

2

Il y a deux solutions si vous souhaitez conserver votre liste ... list-y, sans devoir prérendre toutes les lignes comme le suggère la solution ci-dessus (qui peut être lent à rendre, mange de la RAM et non échelle bien à plus d'un écran ou deux de vues, mais est une solution rapide pour les petites listes, mais je voudrais juste utiliser un tas de vues dans un LinearLayout dans un ScrollView plutôt que dans un ListView dans ce cas).

  1. Ecrire un ListAdapter personnalisé, remplaçant getItemViewType, getViewTypeCount et GetView pour gonfler le bon type de vue et de recycler de manière appropriée pour vos deux types de vues. Vous aurez également besoin de surcharger getItem pour qu'il contienne une logique personnalisée pour déterminer l'ensemble de données source à afficher et pour mapper les données en conséquence, ou regrouper les données dans une liste d'objets (si vous utilisez un adaptateur tableau) et cast dans la méthode getView (probablement un peu plus lent que la manipulation dans le getItem sans lancer). Il suffit d'utiliser cwac-merge, un adaptateur d'emballage avec affichage et adaptateur. Vous pouvez placer deux ListAdapters dans un MergeAdapter et le définir en tant qu'adaptateur ListView unique.

+1

Je pense que je vais essayer cwac-merge. Merci d'avoir répondu. –

1

J'ai eu des problèmes avec le défilement. Je n'ai jamais compris comment partager l'espace vertical de ListView avec une vue différente, et avoir une seule barre de défilement pour les deux. J'ai travaillé autour d'elle en ayant tout ce qui doit faire défiler la mise en page d'une ligne dans le ListView. Ajouter des vues en tant que lignes à un LinearLayout peut avoir des problèmes de mise à l'échelle, mais je pense que vous serez OK si vous n'avez que 10 lignes au total. Sur les appareils Android de 1ère génération, il va probablement commencer à devenir lent autour de 20 éléments (dépend de la complexité de mise en page évidemment). ListView évolue en gonflant uniquement les vues lorsqu'elles apparaissent à l'écran.

Donc, en réponse à votre question, l'une des deux alternatives que vous proposez sera OK, mais l'option LinearLayout sera la plus facile à coder.

+0

Merci pour la réponse. S'il vous plaît, pourriez-vous élaborer plus dans votre première solution? –

Questions connexes