8
votes

Classe de titulaire dans la classe de l'adaptateur

Il y a une simple question qui, après avoir cherché, je voulais demander que nous créons une classe de titulaire statique et assignez les vues à l'intérieur? S'il vous plaît effacer mes doutes ce sera une grande aide pour moi.


1 commentaires

Votre question est-elle concernant le qualificatif «statique» ou le député en général? Avez-vous lu la documentation: développeur.android.com/training/improving- Mise en page / ...


3 Réponses :


1
votes

C'est un point d'optimisation. Sans le titulaire de la vue, vous devrez appeler les méthodes de FindViewByID à chaque fois. Avec le député, vous n'avez besoin que de les appeler une fois.

Exemple avec un TextView et un imageView: p>

  • sans porte-vision: p>

    if (convertView == null) {
        convertView = mInflater.inflate(..., null);
        holder = new ViewHolder();
        //called once
        holder.tv = (TextView) vi.findViewById(..);
        holder.iv = (ImageView) vi.findViewById(...);
        vi.setTag(holder);
    } else {
        holder = (ViewHolder) vi.getTag();
    }
    
    
    holder.tv.setText(...)
    
  • avec porte-visée: p>

    if (convertView == null) {
        convertView = mInflater.inflate(..., null);
    }
    //Following called each time
    TextView tv = (TextView)convertView.findViewById(...);
    ImageView iv = (ImageView)convertView.findViewById(...);
    
    tv.setText(...)
    


0 commentaires

2
votes

La réponse est également simple si vous comprenez comment un Adapterview fonctionne.

un Adapterview est une vue dont les enfants sont déterminés par un adaptateur . Le Adapterview (plus spécifiquement la mise en œuvre concrète comme listview ) contient plus d'informations que ce qui est affiché à tout moment. Pour optimiser la consommation de mémoire et également pour des performances, l'adaptateur réduit généralement la vue S représentant les éléments individuels. Vous avez donc moins de nombre d'objets que les données correspondantes.

Les objets réutilisés peuvent être une hiérarchie complexe de View S ou Groupes de vue . Donc, au cas où vous souhaitez trouver l'individu Afficher les objets de cette hiérarchie, vous devez dépendre de la méthode Findvestyid () et cela devient coûteux lorsque la hiérarchie de vue a plusieurs niveaux. Donc, pour la simplicité (et aussi pour améliorer les performances), le modèle de porte-visuelle est utilisé, où l'individu Afficher les objets que nous souhaitons être affectés à une classe interne statique.

Vous pouvez faire référence à Android ListView et Listacivity - Tutoriel Pour plus d'informations sur le motif titulaire de la vue.


0 commentaires

7
votes

Votre code peut appeler FOETVIEDBYID () fréquemment pendant le défilement de listview , qui peut ralentir les performances. Même lorsque l'adaptateur renvoie une vue gonflée pour le recyclage, vous devez toujours rechercher les éléments et les mettre à jour. Un moyen d'utiliser répété d'une utilisation répétée de FOETVIEVYID () est d'utiliser le "Support de vue" modèle de conception.

A Vue titulaire de la vue Object stocke chacune des vues de composant dans le champ Tag de la mise en page. Vous pouvez donc y accéder immédiatement sans que la nécessité de les regarder à plusieurs reprises. Premièrement, vous devez créer une classe pour contenir votre jeu de vues exact.

Vous pouvez lire ligne directrice Android pour plus de détails.

  1. Ainsi, lorsque vous utilisez "Support de vue", vous pouvez facilement accéder à chaque vue sans avoir besoin de la recherche qui permet d'économiser des cycles de processeur précieux.
  2. ayant un classe interne statique car les vues améliorent grandement les performances

    Vous pouvez également voir Pourquoi Android préfère-t-il les classes statiques Link. < / p>

    un lien plus intéressant Comment Work de la liste , après la lecture de ce développeur de blogs, peut effacer la logique de Lisview et pourquoi il faut également implémenter la classe statique intérieure pour ListView.


0 commentaires