1

Je suis en train de configurer le répertoire de contact dans la section recyclerview avec le gestionnaire de disposition de la grille, quel est mon problème est que l'en-tête est également défini comme un élément dans la durée si la durée est vide.Comment gérer une plage vide dans GridLayoutManager?

J'ai essayé d'utiliser la méthode SpanSizeLookup. Ça ne marche pas comme je m'y attendais.

layoutManager = new GridLayoutManager(getActivity(), 3); 
     layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { 
      @Override 
      public int getSpanSize(int position) { 
       switch(adapterDocument.getItemViewType(position)){ 
        case SectionedRecyclerViewAdapter.VIEW_TYPE_HEADER: 
         return 3; 

        case SectionedRecyclerViewAdapter.VIEW_TYPE_ITEM_LOADED: 
         return 1; 
        default: 
         return 1; 
       } 
      } 
     }); 

C'est ce que je reçois

enter image description here

Et voilà ce que je veut vraiment:

enter image description here

Comment faire en-tête doit être dans la ligne suivante avec largeur ? Je vous remercie.

Répondre

0

il y a quelque chose avec votre code, j'ai changé le code onCreateView de Example1 à:

sectionAdapter = new SectionedRecyclerViewAdapter(); 

    for(char alphabet = 'A'; alphabet <= 'Z';alphabet++) { 
     List<String> contacts = getContactsWithLetter(alphabet); 

     if (alphabet == 'B' || alphabet == 'D') { 
      contacts = Collections.emptyList(); 
     } 

     if (contacts.size() > 0) { 
      sectionAdapter.addSection(new ContactsSection(String.valueOf(alphabet), contacts)); 
     } 
    } 

    RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recyclerview); 
    GridLayoutManager glm = new GridLayoutManager(getContext(), 3); 
    glm.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { 
     @Override 
     public int getSpanSize(int position) { 
      switch(sectionAdapter.getSectionItemViewType(position)) { 
       case SectionedRecyclerViewAdapter.VIEW_TYPE_HEADER: 
        return 3; 
       default: 
        return 1; 
      } 
     } 
    }); 
    recyclerView.setLayoutManager(glm); 
    recyclerView.setAdapter(sectionAdapter); 

et il fonctionne très bien, cela est le résultat:

result