1: Le LayoutInflater
prend vos fichiers XML de mise en page et crée différents objets View à partir de son contenu.
2: Les adaptateurs sont conçus pour réutiliser les vues, lorsqu'une vue est défilée de manière à ne plus être visible, elle peut être utilisée pour l'une des nouvelles vues qui apparaissent. Cette vue réutilisée est le convertView
. Si ceci est nul, cela signifie qu'il n'y a pas de vue recyclée et que nous devons en créer une nouvelle, sinon nous devrions l'utiliser pour éviter d'en créer une nouvelle.
3: Le parent
est fourni pour que vous puissiez gonfler votre vue pour obtenir des paramètres de mise en page appropriés.
Tous ces éléments peuvent être utilisés pour créer efficacement la vue qui apparaîtra dans votre liste (ou une autre vue prenant un adaptateur):
public View getView(int position, @Nullable View convertView, ViewGroup parent){
if (convertView == null) {
//We must create a View:
convertView = inflater.inflate(R.layout.my_list_item, parent, false);
}
//Here we can do changes to the convertView, such as set a text on a TextView
//or an image on an ImageView.
return convertView;
}
Notez l'utilisation du LayoutInflater
, qui parent
peut être utilisé comme argument, et comment convertView
est réutilisé.
getView()
Procédé adaptateur est de l'avis de génération d'un articleListView
,Gallery
...LayoutInflater
est utilisé pour obtenir l'objet View que vous définissez dans un xml de mise en page (l'objet racine, normalementLinearLayout
,FrameLayout
ouRelativeLayout
)convertView
est pour le recyclage. Disons que vous avez une liste qui ne peut afficher que 10 éléments à la fois, et actuellement il affiche l'élément 1 -> élément 10. Lorsque vous faites défiler un élément vers le bas, l'élément 1 sera hors de l'écran, et l'élément 11 sera affiché . Pour générer la vue pour l'élément 11, la méthode getView () sera appelée, etconvertView
voici la vue de l'élément 1 (qui n'est plus nécessaire). Alors créez plutôt un nouvel objet View pour l'élément 11 (ce qui est coûteux), pourquoi ne pas le réutiliserconvertView
? => nous vérifions simplement qu'ilconvertView
est nul ou non, si nul crée une nouvelle vue, sinon réutiliseconvertView
.parentView
est la ListView ou la Galerie ... qui contient la vue de l'élément quigetView()
génère.Remarque : vous n'appelez pas cette méthode directement, il vous suffit de l'implémenter pour indiquer à la vue parent comment générer la vue de l'élément.
la source
Vous pouvez regarder cette vidéo sur la vue de liste. Il s'agit de Google IO de l'année dernière et reste le meilleur aperçu des vues de liste dans mon esprit.
http://www.youtube.com/watch?v=wDBM6wVEO70
Il gonfle les mises en page (les fichiers xml de votre dossier res / layout /) en objets Java tels que LinearLayout et d'autres vues.
Regardez la vidéo, vous mettra au courant de l'utilisation de la vue convertie, essentiellement une vue recyclée en attente d'être réutilisée par vous, pour éviter de créer un nouvel objet et de ralentir le défilement de votre liste.
Vous permet de référencer votre vue de liste à partir de l'adaptateur.
la source
Lorsque vous concevez à l'aide de XML, tous les éléments de votre interface utilisateur ne sont que des balises et des paramètres. Avant de pouvoir utiliser ces éléments d'interface utilisateur (par exemple, un TextView ou un LinearLayout), vous devez créer les objets réels correspondant à ces éléments xml. C'est à cela que sert le gonfleur. Le gonfleur utilise ces balises et leurs paramètres correspondants pour créer les objets réels et définir tous les paramètres. Après cela, vous pouvez obtenir une référence à l'élément d'interface utilisateur à l'aide de findViewById ().
Celui-ci est intéressant. Vous voyez, getView () est appelé à chaque fois qu'un élément de la liste est dessiné. Maintenant, avant que l'élément puisse être dessiné, il doit être créé. Maintenant, convertView est essentiellement la dernière vue utilisée pour dessiner un élément. Dans getView (), vous gonflez d'abord le xml, puis utilisez findByViewID () pour obtenir les différents éléments de l'interface utilisateur de l'élément de liste. Lorsque nous vérifions (convertView == null), ce que nous faisons est de vérifier que si une vue est nulle (pour le premier élément), puis de la créer, sinon, si elle existe déjà, réutilisez-la, pas besoin de recommencer le processus de gonflage . Le rend beaucoup plus efficace.
Vous devez également avoir rencontré un concept de ViewHolder dans getView (). Cela rend la liste plus efficace. Ce que nous faisons, c'est créer une visionneuse et stocker la référence à tous les éléments de l'interface utilisateur que nous avons obtenus après le gonflement. De cette façon, nous pouvons éviter d'appeler les nombreux findByViewId () et gagner beaucoup de temps. Ce ViewHolder est créé dans la condition (convertView == null) et est stocké dans le convertView à l'aide de setTag (). Dans la boucle else, nous le récupérons simplement en utilisant getView () et le réutilisons.
Le parent est un ViewGroup auquel votre vue créée par getView () est finalement attachée. Maintenant, dans votre cas, ce serait le ListView.
J'espère que cela t'aides :)
la source
L'inflateur de mise en page gonfle / ajoute du XML externe à votre vue actuelle.
getView () est appelé plusieurs fois, y compris lors du défilement. Donc, s'il a déjà une vue gonflée, nous ne voulons pas le refaire car le gonflement est un processus coûteux ... c'est pourquoi nous vérifions si sa valeur est nulle et puis le gonflons.
La vue parente est une seule cellule de votre liste.
la source
LayoutInflater
est utilisé pour générer des vues dynamiques du XML pour l'ListView
élément ou dansonCreateView
le fragment.ConvertView
est essentiellement utilisé pour recycler les vues qui ne sont pas dans la vue actuellement. Disons que vous avez un scrollableListView
. En défilant vers le bas ou vers le haut,convertView
donne la vue qui a été défilée. Cette réutilisation économise de la mémoire.Le paramètre parent de la
getView()
méthode donne une référence à la disposition parent qui a la listView. Supposons que vous souhaitiez obtenir l'ID de tout élément du XML parent que vous pouvez utiliser:la source
getView()
méthode create newView
ouViewGroup
pour chaque ligne deListview
ou Spinner. Vous pouvez définir ceciView
ouViewGroup
dans unLayout XML
fichier dans unres/layout
dossier et pouvez lui donner la référenceAdapter
classe Object.si vous avez 4 éléments dans un tableau transmis à l'adaptateur.
getView()
La méthode créera 4 vues pour 4 lignes d'Adaper.La classe LayoutInflater a une méthode inflate () qui crée un objet de vue à partir d'une mise en page de ressources XML.
la source
Vous pouvez également trouver des informations utiles sur getView dans l'interface de l'adaptateur dans le fichier Adapter.java. Ça dit;
la source