68

Bölüm üstbilgileri ile ızgara benzeri düzen uygulamak istiyorum. Ben şimdi ne https://github.com/TonicArtos/StickyGridHeadersSpanSizeLookup kullanarak GridLayoutManager öğesinde öğeler için ayar aralığı

düşünün:

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); 

Şimdi düzenli ürün ve başlıkları hem ben bu çözmek nasıl 1. açıklığı boyutu var mı?

+0

Bu uygulama bana göre doğru görünüyor. MAdapter.getItemViewType (konum) 'unız doğru değeri döndürüyor mu? – yigit

+0

"1", "-1" yerine daha güvenli bir varsayılan değer gibi görünüyor. – BladeCoder

cevap

109

sorun o başlık 2'nin yayılma boyutuna sahip olmalıdır, ve normal öğe 1. Yani doğru uygulamaların yayılma büyüklüğe sahip olmalıdır geçerli:

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; 
       } 
      } 
     }); 
+8

açıklıklı olsun boyutu yöntemi, hücre aralığını alması gereken miktarın genişliğini belirler. İlk öğeyi kapsadığında –

+0

, bir sonraki olanların yüksekliğini karıştırıyor. Başka herhangi bir öğe üzerinde çalışır. Herhangi bir fikir ? –

+0

@RonnyShibley Yukarıda belirttiğiniz sorun için herhangi bir çözüm ... Aynı konuyla karşı karşıyayım, başlık görünmedikten sonra ilk öğe, diğerleri gerektiği gibi gösterilir – Umair

19

Başlık açıklığı sayımı eşit bir olmasına özen gösterilmelidir tüm liste. Kendi soruya

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; 
       } 
    } 
}); 
1

Cevap: adaptörünü ayarladıktan sonra Etkinliğinizden getSpanSizeLookup() geçersiz kılma .

İlgili konular