web-dev-qa-db-fra.com

Définition de la taille de portée d'une seule ligne dans StaggeredGridLayoutManager

J'ai une grille décalée qui a 2 colonnes. Cela fonctionne. Ce que je veux, c'est à la position 0 pour que la ligne s'étende sur les 2 colonnes. J'ai fait cela avant assez facilement en utilisant GridLayoutManger:

                mGridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
                    @Override
                    public int getSpanSize(int position) {
                        return position == 0 ? 2 : 1;
                    }
                });

StaggeredGridLayoutManager ne me fournit pas cette fonctionnalité comme le fait GridLayoutManager.

Existe-t-il une manière différente de procéder? J'ai recherché mais je n'ai trouvé personne avec le même problème, ce qui est surprenant car je pense que cette fonctionnalité serait très utile pour mon scénario et pour le défilement infini, lorsqu'un ProgressBar est affiché dans la dernière ligne du RecyclerView.

26
Daniel Julio

Vous pouvez utiliser la méthode setFullSpan .
De cette façon, l'élément sera mis en page en utilisant toute la zone de portée.

Cela signifie que si l'orientation est verticale, la vue aura toute sa largeur; si l'orientation est horizontale, la vue aura toute sa hauteur.

Quelque chose comme ça:

public final void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {

    StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) viewHolder.itemView.getLayoutParams();
    layoutParams.setFullSpan(true);
}

Faites attention.
Il prend en charge les vues qui couvrent toutes les colonnes, mais cela devrait suffire pour votre cas.

74
Gabriele Mariotti