Peut un GridView avoir un pied de page et en-tête comme ListView?
Une question rapide:
Dans ListView
j'utilise ce code:
list.addHeaderView(headerView);
Comment faire lorsque l'on travaille sur gridview
?
Grâce.
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de support pour l'en-tête ou le pied de page vues avec
GridView
, désolé.GridView
dans unScrollView
, par exemple.Il y a une assez bonne mise en œuvre de la GridView avec en-tête de support dans Google Photos de l'application, comme c'est OSS code que vous pouvez utiliser tel quel ou de le prendre comme une référence pour votre propre mise en œuvre:
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android-apps/4.3_r2.1/com/android/photos/views/HeaderGridView.java
Idée de base est assez simple - WrapperAdapter crée un faux en ligne, en augmentant le nombre d'éléments par le nombre de colonnes et de retourner ensuite une vue d'en-tête de l'élément.
Vous pouvez utiliser cette. Le pied de page s'affiche/masque le bas de la grille lorsque vous atteignez/laisser le dernier nombre d'éléments. Il ne fait pas défiler, mais je remarque à peine la différence.
Dans votre activité/du fragment onCreate/onCreateView vous ajoutez un OnScrollListener de la GridView:
Votre mise en page doit ressembler à quelque chose comme ci-dessous. Avis de la layout_weight (et layout_height) paramètre dans le contrôle gridview, il est nécessaire de faire le bon espace pour le pied de page quand il devient visible.
Exemple de code:
Gradle construire:
.
Vous auriez à utiliser une Liste, puis faire de chaque ligne de la liste ressemble, il est en fait une ligne de grille. Donc, si vous avez un 3 colonne de la grille, vous auriez du faire une mise en page pour la liste qui ressemble à 3 colonnes. Vous seriez alors obligé de modifier certains aspects de l'Adaptateur pour le faire fonctionner, de sorte que chaque ListView ligne représente en fait 3 lignes de données, de sorte que vous savez, getCount()/3 type de choses.
Comment sur la vérification de la "0" index de l'élément dans votre carte? Vous pouvez gonfler la vue personnalisée pour la première.
Ne l'ai pas testé, mais devrait fonctionner.
Vous pouvez utiliser AsymmetricGridView et spécifier les en-têtes/pieds de page avec une plus grande rowSpan afin qu'ils la prennent toute la ligne.
Pourquoi ne pas changer l'apparence des cellules pour les premières lignes? si vous connaissez le nombre de colonnes que vous avez, vous savez combien d'articles apparaissent dans l'en-tête = nombre de colonnes.Il fonctionne pour moi
Vous pouvez utiliser cette bibliothèque, http://tonicartos.github.io/StickyGridHeaders/
qui vous permet de créer des en-têtes qui sont collant (pour le regroupement de la liste et de garder la tête visible pour le groupe en cours). Vous pouvez désactiver le collant fonctionnalité.
Il existe un moyen pour accomplir les fonctionnalités souhaitées, SANS l'aide d'une bibliothèque ou quoi que ce soit.
EDIT: Juste emprunter le HeaderGridView mise en Œuvre par google, voir Ici
Vous pouvez également le personnaliser pour le pied de page. Ci-dessous la suggestion est tout simplement trop complexe et a nécessité plus de peaufinage.
Sans entrer dans les détails, tout ce que vous devez faire est de cette.
1) La Sous-Classe GridView
2) remplacer onScrollChanged
3) Calculer le décalage à chaque fois qu'il défile
4) Définir la parentView(qui contient la headerView et gridview) traduction y -Offset.(point de vue.setTranslationY (offset). Ont également, si l'instruction pour qu'une fois atteint un certain décalage, il serait arrêter le défilement.
5) évidemment, vous voulez de la structure de ce bien jusqu'à votre gridview peut avoir une méthode comme attachToGridview(View vue). J'ai une mise en œuvre complète de ce qui fonctionne.
Voir Faites défiler décalage de contrôle GridView pour obtenir de l'aide sur l'obtention de décalage depuis GridView a un bug ont été les points de vue sont recyclés.
et de la Chapelure:
fonctionne très bien, faites défiler pour la grille fonctionne aussi bien.