SpanSizeLookup kullanarak GridLayoutManager'daki öğeler için aralık ayarlama


92

Bölüm başlıklarıyla ızgara benzeri düzen uygulamak istiyorum. Https://github.com/TonicArtos/StickyGridHeaders'ı düşünün

Şimdi ne yapıyorum:

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

Artık hem normal öğelerin hem de başlıkların yayılma boyutu 1'dir. Bunu nasıl çözebilirim?


bu uygulama bana doğru görünüyor. mAdapter.getItemViewType(position)Doğru değeri döndürüyorsa hata ayıkladınız mı ?
yigit

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

Ben acemiyim Benim için bu bağlantı bana yardımcı oldu 3 RecyclerView Infinite Scroll Example
Vijay Ram

Yanıtlar:


160

Sorun, başlığın yayılma boyutunun 2 olması ve normal öğenin yayılma boyutunun 1 olması gerektiğiydi. Dolayısıyla doğru uygulamalar:

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

14
get span size yöntemi, hücrenizin alacağı sütun satırının sayısını değil, miktar aralık genişliğini belirler !!
Karthik Rk

1
İlk öğeyi yayarken, bir sonraki öğenin yüksekliğini bozuyor. Başka herhangi bir öğe üzerinde çalışır. Herhangi bir fikir ?
Ronny Shibley

1
@RonnyShibley yukarıda belirttiğiniz sorun için herhangi bir çözüm ... Ben de aynı sorunla karşı karşıyayım, başlıktan sonraki ilk öğe görünmüyor, diğerlerinin tümü gerektiği gibi gösteriliyor
Umair

Bu uyanmıyor.
Mehdi

35

Üst bilgi, tüm listenin aralık sayısına eşit bir aralığa sahip olmalıdır.

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

2

Kendi sorumun cevabı: Bağdaştırıcıyı ayarladıktan sonra Activity'den getSpanSizeLookup () öğesini geçersiz kıl.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.