web-dev-qa-db-fra.com

GetView Vs. BindView dans un CursorAdapter personnalisé?

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?

53
Christopher Perry

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().

73
CommonsWare
/**
     * @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.

19
Crossle Song

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().

2
Yogesh Umesh Vaity