3 votes

Android - bindView et newView pour la disposition de deux vues dans CursorAdapter

Alors voici l'histoire :

Je veux utiliser deux mises en page dans mon adaptateur. Donc, en gros, j'ai besoin d'avoir un if dans newView() pour déterminer quelle vue renvoyer et un if dans bindView() pour savoir aussi ce qu'il faut faire dans la vue. Est-ce la bonne approche ?

Je pense à quelque chose comme ça :

@Override
public View newView(Context context, Cursor c,
        ViewGroup parent) {     
    if (HEADER == getItemViewType(c.getPosition())){
        return (View) layoutInflater.inflate(R.layout.my_header, null);
    } else {
        return (View) layoutInflater.inflate(R.layout.my_row, null);
    }
}

Puis sur bindView :

@Override
public void bindView(final View view, final Context context,
        Cursor c) {     
    if (TYPE_HEADER == getItemViewType(c.getPosition())){
        // init and set values here e.g. view.findViewById().setText()
    } else {
        // init and set values here e.g. view.findViewById().setText()
    }
}

Suis-je sur la bonne voie ? Car d'après mes journaux, c.getPosition() dans newView donne un résultat différent de c.getPosition() dans bindView. En fait, je pense simplement surcharger le getView() mais ils ont dit que la bonne pratique est de surcharger newView et bindView dans CursorAdapter.

0voto

CoatedMoose Points 733

En dehors de mon commentaire (sur la question) sur la mauvaise conception de la base de données...

Je ferais une mise en page qui engloberait les deux header y content puis marquez les header des deux mises en page comme visiblity="gone" . Pour les deux bindView y newView les rangs où vous avez besoin de la header subview, faites-en une View.VISIBLE et la sous-vue du contenu View.GONE . Bien sûr, quand vous voulez la mise en page du contenu, vous pouvez les échanger.

Comme je l'ai dit, vous voulez probablement ExpandableListView . Je n'ai pas de statistiques ou de mesures à ce sujet, mais je soupçonne que les performances seront meilleures. Cela signifie également que vous ne dépendez pas de la solution de fortune consistant à placer les "en-têtes" dans la même table que vos données.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X