नेक्स्ट स्क्रोलव्यू स्क्रॉल के अंदर रिसाइकलवेरी है लेकिन सामान्य रिसाइक्लेव्यू या नेस्टेड स्क्रॉलव्यू की तरह तेजी से स्क्रॉल नहीं करता है


96

मैं RecyclerViewअंदर उपयोग कर रहा हूं NestedScrollViewऔर यह काम करता है। लेकिन जब मैं RecyclerViewअंदर LinearLayoutया किसी चीज का उपयोग करता हूं , तो यह इशारा के आधार पर विभिन्न गति में स्क्रॉल करता है। स्क्रॉल इशारे को सुनता है और यदि मैं केवल थोड़ा ऊपर स्लाइड करता हूं, तो यह थोड़ा स्क्रॉल करता है जबकि अगर मैं वास्तव में तेजी से स्लाइड करता हूं, तो यह वास्तव में तेजी से स्क्रॉल करता है। अब मेरी समस्या यह है कि है RecyclerViewअंदर NestedScrollViewनिश्चित रूप से स्क्रॉल लेकिन तेजी से पुस्तक काम नहीं करता है। हालाँकि, मैं तेज़ या धीमी गति से स्लाइड करता हूं, RecyclerViewया NestedScrollViewकेवल थोड़ा स्क्रॉल करता हूं ।

मैं अपने NestedScrollViewया अपने RecyclerViewअंदर के दृश्य को विभिन्न गति में स्क्रॉल कैसे कर सकता हूं ?


3
(गलत) recyclerView.setNestedScrollingEnabled; यह वास्तव में काम करता है !!
आंग सी मिन हट्ट

stackoverflow.com/questions/27083091/… समाधान यहाँ पाया जा सकता है।
Maruti060385

कृपया खुले मज़े का इस्तेमाल करें सेटनैस्टक्रॉसिंग सक्षम (सक्षम: बुलियन): यूनिट आशा है कि यह आपकी मदद करेगा
Int0TheRainb0w

जवाबों:


266

प्रयत्न

recyclerView.setNestedScrollingEnabled(false);

14
लेकिन इस सेटिंग से, recyclerview विचारों को रीसायकल नहीं करता है! इसके बारे में आपका क्या विचार है?
MAY3AM

वास्तव में मैं अपने लेआउट के अंदर विभिन्न लेआउट प्रबंधकों (जैसे रैखिक लेआउट और ग्रिड लेआउट) के साथ दो या अधिक पुनर्नवीनीकरण विचार जोड़ रहा हूं जिसमें बैनर, और अन्य विचार भी शामिल हैं। तो इस तरह से पुनर्नवीनीकरण दृश्य को संभालने के लिए, इन सभी को नेस्टेड स्क्रॉल व्यू के अंदर डाल देना मेरे लिए ठीक है।
आंग सी मिन हेट

24
मुझे नहीं पता कि इस उत्तर को कितने उत्थान मिले। यदि नेस्टेड स्क्रॉल को अक्षम करना है तो यह उद्देश्य को हरा रहा है। क्या होगा अगर मैं नेस्टेड स्क्रॉल और रिसाइकलर का उपयोग करना चाहता हूं ?? कुछ समन्वयकलेयआउट, AppBarLayout और RecyclerView की तरह?
जिमित पटेल

धन्यवाद @JimitPatel, यह फिलहाल मेरा मुद्दा है। मेरे पास नेस्ट्रोक्रोल दृश्य के भीतर एक रीसायकल है और मैं स्क्रॉल नहीं कर सकता। stackoverflow.com/questions/41259756/…
Karoly

1
@Karoly नेस्टेड स्क्रॉल को अनुकूलित करने की आवश्यकता है ... मैंने वह ... कुछ घंटों में पोस्ट किया होगा ... वर्तमान में, मैं यात्रा कर रहा हूं। मैंने टूलबार के बाद पुनर्नवीनीकरण दृश्य के साथ लंबन प्रभाव में उस मुद्दे का सामना किया।
जिमित पटेल

53

डिफ़ॉल्ट रूप से setNestedScrollingEnabledएपीआई -21 के बाद ही काम करता है।

आप ViewCompat.setNestedScrollingEnabled(recyclerView, false);API-21 (लॉलीपॉप) से पहले और बाद के लिए नेस्टेड स्क्रॉलिंग को अक्षम करने के लिए उपयोग कर सकते हैं । प्रलेखन के लिए लिंक

उममीद है कि इससे मदद मिलेगी!


22

मैं android 16 पर काम कर रहा था, जहाँ setNestedSCrollEnabled विधि का उपयोग करना संभव नहीं था,

मैं अंत में RecyclerView को स्क्रॉल करने से रोकने के लिए क्या कर रहा हूं।

जैसे LinerLayoutManager में मैंने canScrollHor क्षैतिज रूप से बनाया, canScrollVertically डिफ़ॉल्ट रूप से गलत वापस करने के लिए।

myRecyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false){
            @Override
            public boolean canScrollHorizontally() {
                return false;
            }

            @Override
            public boolean canScrollVertically() {
                return false;
            }
        });

यह वास्तव में मेरे लिए काम किया। मेरे पास एक RecyclerView था, एक LinearLinear के अंदर, एक स्क्रॉल दृश्य के अंदर।
फॉनटेक

9

कई पुनरावृत्तियों के बाद, मैं एक समाधान के साथ आया।

  1. यदि आप RecyclerView का उपयोग कर रहे हैं, तो:

    recyclerView.setNestedScrollingEnabled(false);
  2. यदि आप NestedScrollingView के अंदर LinearLayout का उपयोग कर रहे हैं, तो LinearLayout को एक सामान्य स्क्रॉल दृश्य के अंदर ले जाएं और फिर उसकी स्क्रॉलिंग को इसमें सेट करें

    scrollView.setNestedScrollingEnabled(false);

2

एंड्रॉयड: overScrollMode = "कभी नहीं

  <android.support.v4.widget.NestedScrollView
    android:id="@+id/nestedScrollView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:overScrollMode="never">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </LinearLayout>
 </android.support.v4.widget.NestedScrollView>

1

आप ExtendRecyclerView वर्ग के साथ स्क्रॉलव्यू का उपयोग कर सकते हैं जो ऑनमर्ज़ विधि को ओवरराइड करता है। ये मेरे लिए सही है!

@Override
protected void onMeasure(int widthSpec, int heightSpec) {
    int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
    super.onMeasure(widthSpec, expandSpec);
}

1
recyclerView.setNestedScrollingEnabled(false);

कभी-कभी उपयोगी होगा। लेकिन यह सभी समय के लिए उचित नहीं है। लेकिन फिर भी यह पुनर्नवीनीकरण दृश्य में रीसाइक्लिंग सुविधा को अक्षम करता है।

विकल्प:

Recycler दृश्य के साथ CollapsiveToolbarLayout का प्रयास करें। अन्य विचारों को कॉलैप्सिव टॉलबार लेआउट में रखें।


0

मैं इस समस्या से भी मिला। और 26.1.0इसे ठीक करने के लिए अपग्रेड करें ।


-1

माई केस में मैंने ड्रॉबल-एक्सएचडीएचडीपीआई फ़ोल्डर के ड्रॉबल फोल्डर में सभी इमेजेज रखीं, इसीलिए मेरी स्क्रीन यूआई लैगिंग है।


-3

आपको LinearLayout जैसे किसी भी लेआउट में पुनर्नवीनीकरण दृश्य को लपेटना चाहिए और पुनर्नवीनीकरण आकार को स्थिर करने के लिए 800dp की तरह सेट करना चाहिए। यह चिकनी स्क्रॉल को सक्षम करेगा और पुनर्नवीनीकरण दृश्य स्क्रॉल के दौरान अभी भी पुनर्नवीनीकरण दृश्य होगा।

<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
                                xmlns:app="http://schemas.android.com/apk/res-auto"
                                android:layout_width="match_parent"
                                android:layout_height="match_parent"
                                android:orientation="vertical">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="800dp"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</LinearLayout>


1
यह एक अच्छा जवाब है क्योंकि यह RecyclerView के मुख्य लाभ को तोड़ने के बिना फ़्लिंग स्क्रॉल मुद्दे को ठीक करने का तरीका इंगित करता है, केवल दृश्य दृश्यों को लोड करता है और जब उन्हें दृष्टि से बाहर स्क्रॉल किया जाता है तो उन्हें पुनर्चक्रित करता है। लोगों ने इसे डाउन-वोट किया हो सकता है क्योंकि 800dp जैसा एक निश्चित मूल्य सभी स्क्रीन आकारों और झुकावों में काम करने वाला नहीं है, लेकिन लेआउट_हाइट मान की गणना की जा सकती है और प्रोग्रामेटिक रूप से सेट किया जा सकता है - थोड़ा गड़बड़ है, लेकिन यह दोनों मुद्दों को हल करता है।
jk7

-3

यह WAI है। NestedScrollView अपने बच्चों को कल्पना "अनिर्दिष्ट" के साथ मापता है। बच्चा जितना चाहे उतना बड़ा हो सकता है।

यह अनिवार्य रूप से एनएसवी और आरवी की ऊंचाई के बराबर है। जहां तक ​​आरवी का संबंध है, यह मानता है कि यह पूरी तरह से प्रदर्शित है।

अपने RV को LL से लपेटें और अपने RV को एक ऊँचाई दें। LL मापक युक्ति को UNSPECIFIED होने के लिए सेट नहीं करेगा, इसलिए RV आपके द्वारा प्रदान की जाने वाली DP की अपनी निर्धारित ऊंचाई के भीतर सही ढंग से स्क्रॉल करेगा।

इस पद्धति का एकमात्र नकारात्मक पहलू यह है कि आप अपने आरवी पर एक मैच अभिभावक नहीं कर पाएंगे।

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