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.