Définir l'étendue des éléments dans GridLayoutManager en utilisant SpanSizeLookup

Je veux implémenter une disposition en forme de grille avec des en-têtes de section. Pensez à https://github.com/TonicArtos/StickyGridHeaders

Ce que je fais maintenant:

mRecyclerView = (RecyclerView) view.findViewById(R.id.grid); mLayoutManager = new GridLayoutManager(getActivity(), 2); mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { switch(mAdapter.getItemViewType(position)){ case MyAdapter.TYPE_HEADER: return 1; case MyAdapter.TYPE_ITEM: return 2; default: return -1; } } }); mRecyclerView.setLayoutManager(mLayoutManager); 

Maintenant, les éléments et les en-têtes réguliers ont une taille de 1. Comment puis-je résoudre cela?

3 Solutions collect form web for “Définir l'étendue des éléments dans GridLayoutManager en utilisant SpanSizeLookup”

Le problème était que l'en-tête devrait avoir une taille de portée de 2, et l'élément régulier devrait avoir une taille de 1. de sorte que les implémentations correctes sont:

 mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { switch(mAdapter.getItemViewType(position)){ case MyAdapter.TYPE_HEADER: return 2; case MyAdapter.TYPE_ITEM: return 1; default: return -1; } } }); 

L'en-tête doit avoir une portée égale au nombre d'étendue de la liste entière.

 mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { switch(mAdapter.getItemViewType(position)){ case MyAdapter.TYPE_HEADER: return mLayoutManager.getSpanCount(); case MyAdapter.TYPE_ITEM: return 1; default: return -1; } } }); 

Répondez à ma propre question: Remplacez getSpanSizeLookup () de l'activité après avoir configuré la carte.

coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.