Donc, je regarde cette vidéo http://www.youtube.com/watch?v=N6YdwzAvwOA et Romain Guy montre comment rendre le code d'adaptateur d'interface utilisateur plus efficace en utilisant le getView()
méthode. Est-ce que cela s'applique également aux CursorAdapters? J'utilise actuellement bindView()
et newView()
pour mes adaptateurs de curseur personnalisés. Dois-je utiliser getView à la place?
CursorAdapter
a une implémentation de getView()
qui délègue à newView()
et bindView()
, de manière à appliquer le modèle de recyclage des lignes. Par conséquent, vous n'avez rien à faire de spécial avec un CursorAdapter
pour le recyclage des lignes si vous remplacez newView()
et bindView()
.
/**
* @see Android.widget.ListAdapter#getView(int, View, ViewGroup)
*/
public View getView(int position, View convertView, ViewGroup parent) {
if (!mDataValid) {
throw new IllegalStateException("this should only be called when the cursor is valid");
}
if (!mCursor.moveToPosition(position)) {
throw new IllegalStateException("couldn't move cursor to position " + position);
}
View v;
if (convertView == null) {
v = newView(mContext, mCursor, parent);
} else {
v = convertView;
}
bindView(v, mContext, mCursor);
return v;
}
Ce code source CursorAdapter, clairement cursorAdapter fonctionne plus.
L'implémentation CursorAdapter
est différente de la sous-classification des adaptateurs réguliers comme BaseAdapter
, vous n'avez pas besoin de remplacer getView()
, getCount()
, getItemId()
car ces informations peuvent être récupérées à partir du curseur lui-même.
Étant donné un Cursor
, il vous suffit de remplacer deux méthodes pour créer une sous-classe CursorAdapter
:
bindView()
: Étant donné une vue, mettez-la à jour pour afficher les données dans le curseur fourni.
newView()
: Ceci est appelé pour constructurer une nouvelle vue qui va dans la liste.
CursorAdapter
se chargera de recycler les vues (contrairement à la méthode getView()
sur le Adapter
normal). Il n'appelle pas la newView()
chaque fois qu'il a besoin d'une nouvelle ligne. S'il a déjà un View
(pas null
), il appellera directement la bindView()
, de cette façon, la vue créée est réutilisée. En divisant la création et le remplissage de chaque vue en ces deux méthodes, le CursorAdapter
permet de réutiliser la vue alors que, dans les adaptateurs normaux, ces deux choses sont effectuées dans la méthode getView()
.