SpanSizeLookup का उपयोग करके GridLayoutManager में आइटम के लिए स्पैन सेट करें


90

मैं अनुभाग हेडर के साथ ग्रिड जैसे लेआउट को लागू करना चाहता हूं। Https://github.com/TonicArtos/StickyGridHeaders के बारे में सोचें

मैं अभी क्या करता हूं:

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

अब नियमित आइटम और हेडर दोनों का आकार 1 है। मैं इसे कैसे हल करूं?


यह कार्यान्वयन मुझे सही लगता है। क्या आपने डिबग किया अगर आपका mAdapter.getItemViewType(position)सही मूल्य वापस आ रहा है?
यजीत

1
"-1" की तुलना में "1" एक सुरक्षित डिफ़ॉल्ट मान की तरह लगता है।
ब्लेडकोडर

मैं एक नौसिखिया हूँ। मेरे लिए, इस लिंक ने मुझे 3 RecyclerView Infinite Scroll Examples
विजय राम

जवाबों:


158

समस्या यह थी कि हेडर की अवधि 2 के आकार की होनी चाहिए, और नियमित आइटम की अवधि का आकार 1. होना चाहिए। इसलिए सही कार्यान्वयन है:

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

13
स्पैन साइज़ मेथड तय करता है कि आपके सेल की चौड़ाई कितनी होनी चाहिए, यह निर्धारित करने के लिए कि कोल रो की संख्या नहीं होनी चाहिए !!
कार्तिक आरके

1
पहली वस्तु को फैलाते समय, यह अगले वाले की ऊंचाई को गड़बड़ कर रहा है। यह किसी अन्य आइटम पर काम करता है। कोई उपाय ?
रॉनी शिबली

1
@RonnyShibley आपके द्वारा ऊपर बताई गई समस्या के लिए कोई समाधान ... मैं भी इसी मुद्दे का सामना कर रहा हूं, शीर्ष लेख के बाद पहला आइटम नहीं दिखाता है, अन्य सभी को आवश्यक रूप से दिखाया गया है
उमैर

यह नहीं जाग रहा है।
महदी

34

हैडर के पास पूरी सूची के स्पैन काउंट के बराबर स्पान होना चाहिए।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.