दिलचस्प पोस्ट
बिटमैप एक बनावट में अपलोड करने के लिए बहुत बड़ी है सत्र.आबंदन () और सत्र के बीच अंतर क्या है। क्लीयर () सीएपीआईसीओएम के बिना एफ़आईई – सी + + पर प्रामाणिकोड हस्ताक्षर मान्य करें एचटीएमएल मार्की टैग MySQL के लिए इष्टतम varchar आकार क्या हैं? कैसे PHP में websockets सर्वर बनाने के लिए MySQL: ऑर्डर ऑफ़ ऑर्डर आर रैंड () NSFetchedResultsController एक स्ट्रिंग के पहले अक्षर द्वारा बनाए गए अनुभागों के साथ सूची की समझ और जनरेटर अभिव्यक्ति में उपज IOS में मेमोरी उपयोग देखना क्या C ++ संदर्भ चर लौटने का अभ्यास बुराई है? लिनक्स में रनटाइम पर यूडीपी प्राप्त बफर आकार निर्दिष्ट करना पांडा डेटाफ़्रेम में चयनित सेल के लिए मान सेट करें tomcat7 – jdbc डेटासार्ट – यह बहुत मेमोरी रिसाव बनाने की संभावना है डेल्फी विन्डोज 32 के लिए ओआरएम

ScrollView के अंदर रीसायकलदृश्य देखें काम नहीं कर रहा है

मैं एक लेआउट को लागू करने की कोशिश कर रहा हूं जिसमें रीसाइक्लेअर व्यू और स्क्रॉलव्यू एक ही लेआउट पर है।

लेआउट टेम्पलेट:

<RelativeLayout> <ScrollView android:id="@+id/myScrollView"> <unrelated data>...</unrealated data> <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/my_recycler_view" /> </ScrollView> </RelativeLayout> 

समस्याएं: मैं ScrollView के अंतिम तत्व तक स्क्रॉल कर सकता ScrollView

मैंने कोशिश की थी चीजें:

  1. ScrollView (अब ScrollView में RecyclerView शामिल है) के अंदर कार्ड दृश्य – RecyclerView तक कार्ड देख सकते हैं
  2. प्रारंभिक सोचा था कि इस viewGroup बजाय RecyclerView viewGroup का उपयोग करना था, जहां का एक दृश्य प्रकार CardView लेकिन मुझे CardView साथ सटीक समान परिणाम मिलते हैं

Solutions Collecting From Web of "ScrollView के अंदर रीसायकलदृश्य देखें काम नहीं कर रहा है"

ScrollView बजाय NestedScrollView का ScrollView

यद्यपि सिफारिश है कि

आपको किसी स्क्रॉल करने योग्य दृश्य के अंदर स्क्रॉल करने योग्य दृश्य को कभी नहीं लगाया जाना चाहिए

एक अच्छी सलाह है, हालांकि यदि आप रीसाइक्लर देखने पर एक निश्चित ऊँचाई निर्धारित करते हैं, तो यह ठीक काम करना चाहिए।

यदि आप एडेप्टर आइटम लेआउट की ऊंचाई जानते हैं तो आप केवल रीसाइक्लेअर वीव की ऊंचाई की गणना कर सकते हैं।

 int viewHeight = adapterItemSize * adapterData.size(); recyclerView.getLayoutParams().height = viewHeight; 

मुझे पता है कि मैं इसे खेल में देर कर रहा हूं, लेकिन यह समस्या अब भी मौजूद है जब गूगल ने android.support.v7.widget.RecyclerView पर फिक्स किया है। android.support.v7.widget.RecyclerView

मैं अब जो मुद्दा layout_height=wrap_content वह RecyclerView layout_height=wrap_content साथ layout_height=wrap_content में सभी आइटमों की समस्या को नहीं ले रहा है जो केवल मार्शमॉलो और नोगाट + (एपीआई 23, 24, 25) के संस्करणों पर होता है।
(अपडेट करें: ScrollView साथ ScrollView को प्रतिस्थापित करना। ScrollView सभी संस्करणों पर काम करता है। मैं किसी तरह परीक्षण स्वीकार किए गए समाधान को मिटता हूं। डेमो के रूप में मेरे github प्रोजेक्ट में इसे जोड़ा गया।)

विभिन्न चीजों की कोशिश करने के बाद, मैंने पाया कि इस समस्या को हल करता है।

यहां संक्षेप में मेरा लेआउट संरचना है:

 <ScrollView> <LinearLayout> (vertical - this is the only child of scrollview) <SomeViews> <RecyclerView> (layout_height=wrap_content) <SomeOtherViews> 

RecyclerView विथ RecyclerView साथ काम करने का हल है। मुझसे यह मत पूछो कि मुझे यह काम कैसे मिला है !!! ¯\_(ツ)_/¯

  <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:descendantFocusability="blocksDescendants"> <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="wrap_content" /> </RelativeLayout> 

पूर्ण उदाहरण GitHub प्रोजेक्ट पर उपलब्ध हैhttps://github.com/amardeshbd/android-recycler-view-wrap-content

कार्रवाई में ठीक दिखने वाला डेमो स्क्रीनकास्ट यहां है:

स्क्रीनकास्ट

नई एंड्रॉइड सपोर्ट लाइब्रेरी 23.2 उस समस्या को हल करती है, अब आप रैप-सामग्री को अपने RecyclerView वीव की ऊंचाई के रूप में सेट कर सकते हैं और सही ढंग से काम कर सकते हैं।

एंड्रॉइड सपोर्ट लाइब्रेरी 23.2

यदि रिसाइक्लर दृश्य के लिए निर्धारित ऊँचाई किसी के लिए (मेरे जैसे) काम नहीं करता है, तो निश्चित है कि मैंने निश्चित ऊंचाई समाधान में जो जोड़ा है:

 mRecyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() { @Override public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { int action = e.getAction(); switch (action) { case MotionEvent.ACTION_MOVE: rv.getParent().requestDisallowInterceptTouchEvent(true); break; } return false; } @Override public void onTouchEvent(RecyclerView rv, MotionEvent e) { } @Override public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { } }); 

रीसाइक्लरदृश्य ScrollViews में इतने लंबे समय तक लगाए जाते हैं जब तक वे खुद को स्क्रॉल नहीं कर रहे हैं इस मामले में, यह एक निश्चित ऊंचाई बनाने के लिए समझ में आता है।

उचित समाधान, रीसाइक्लेरव्यू ऊँचाई पर wrap_content का उपयोग wrap_content और फिर एक कस्टम wrap_content को लागू करना जो रैपिंग को wrap_content कर सकता है।

अपनी प्रोजेक्ट में इस LinearLayoutManager की प्रतिलिपि बनाएं: https://github.com/serso/android-linear-layout-manager/blob/master/lib/src/main/java/org/solovyev/android/views/llm/LinearLayoutManager.java

फिर RecyclerView लपेटें:

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

और इसे इस तरह सेट करें:

  RecyclerView list = (RecyclerView)findViewById(R.id.list); list.setHasFixedSize(true); list.setLayoutManager(new com.example.myapp.LinearLayoutManager(list.getContext())); list.setAdapter(new MyViewAdapter(data)); 

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

ScrollView , आप fillViewport=true उपयोग कर सकते हैं और layout_height="match_parent" नीचे के रूप में बना सकते हैं और रिसाइकिलर को अंदर देख सकते हैं:

 <ScrollView android:fillViewport="true" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/llOptions"> <android.support.v7.widget.RecyclerView android:id="@+id/rvList" android:layout_width="match_parent" android:layout_height="wrap_content" /> </ScrollView> 

कोड के माध्यम से आवश्यक कोई और ऊंचाई समायोजन नहीं है

RecyclerView की ऊंचाई की गणना मैन्युअल रूप से अच्छी नहीं है, कस्टम LayoutManager का इस्तेमाल करना बेहतर है

उपरोक्त मुद्दे का कारण किसी भी दृश्य में है, जिसके पास स्क्रॉल ( ListView , GridView , RecyclerView ) की ऊंचाई की गणना करने में विफल रहा है, जब किसी अन्य दृश्य में एक बच्चे के रूप में जोड़ते हैं तो स्क्रॉल होता है इसलिए इसकी onMeasure विधि को ओवरराइड करने से समस्या का समाधान होगा।

नीचे दिए गए डिफ़ॉल्ट लेआउट मैनेजर को बदलें:

 public class MyLinearLayoutManager extends android.support.v7.widget.LinearLayoutManager { private static boolean canMakeInsetsDirty = true; private static Field insetsDirtyField = null; private static final int CHILD_WIDTH = 0; private static final int CHILD_HEIGHT = 1; private static final int DEFAULT_CHILD_SIZE = 100; private final int[] childDimensions = new int[2]; private final RecyclerView view; private int childSize = DEFAULT_CHILD_SIZE; private boolean hasChildSize; private int overScrollMode = ViewCompat.OVER_SCROLL_ALWAYS; private final Rect tmpRect = new Rect(); @SuppressWarnings("UnusedDeclaration") public MyLinearLayoutManager(Context context) { super(context); this.view = null; } @SuppressWarnings("UnusedDeclaration") public MyLinearLayoutManager(Context context, int orientation, boolean reverseLayout) { super(context, orientation, reverseLayout); this.view = null; } @SuppressWarnings("UnusedDeclaration") public MyLinearLayoutManager(RecyclerView view) { super(view.getContext()); this.view = view; this.overScrollMode = ViewCompat.getOverScrollMode(view); } @SuppressWarnings("UnusedDeclaration") public MyLinearLayoutManager(RecyclerView view, int orientation, boolean reverseLayout) { super(view.getContext(), orientation, reverseLayout); this.view = view; this.overScrollMode = ViewCompat.getOverScrollMode(view); } public void setOverScrollMode(int overScrollMode) { if (overScrollMode < ViewCompat.OVER_SCROLL_ALWAYS || overScrollMode > ViewCompat.OVER_SCROLL_NEVER) throw new IllegalArgumentException("Unknown overscroll mode: " + overScrollMode); if (this.view == null) throw new IllegalStateException("view == null"); this.overScrollMode = overScrollMode; ViewCompat.setOverScrollMode(view, overScrollMode); } public static int makeUnspecifiedSpec() { return View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); } @Override public void onMeasure(RecyclerView.Recycler recycler, RecyclerView.State state, int widthSpec, int heightSpec) { final int widthMode = View.MeasureSpec.getMode(widthSpec); final int heightMode = View.MeasureSpec.getMode(heightSpec); final int widthSize = View.MeasureSpec.getSize(widthSpec); final int heightSize = View.MeasureSpec.getSize(heightSpec); final boolean hasWidthSize = widthMode != View.MeasureSpec.UNSPECIFIED; final boolean hasHeightSize = heightMode != View.MeasureSpec.UNSPECIFIED; final boolean exactWidth = widthMode == View.MeasureSpec.EXACTLY; final boolean exactHeight = heightMode == View.MeasureSpec.EXACTLY; final int unspecified = makeUnspecifiedSpec(); if (exactWidth && exactHeight) { // in case of exact calculations for both dimensions let's use default "onMeasure" implementation super.onMeasure(recycler, state, widthSpec, heightSpec); return; } final boolean vertical = getOrientation() == VERTICAL; initChildDimensions(widthSize, heightSize, vertical); int width = 0; int height = 0; // it's possible to get scrap views in recycler which are bound to old (invalid) adapter entities. This // happens because their invalidation happens after "onMeasure" method. As a workaround let's clear the // recycler now (it should not cause any performance issues while scrolling as "onMeasure" is never // called whiles scrolling) recycler.clear(); final int stateItemCount = state.getItemCount(); final int adapterItemCount = getItemCount(); // adapter always contains actual data while state might contain old data (fe data before the animation is // done). As we want to measure the view with actual data we must use data from the adapter and not from the // state for (int i = 0; i < adapterItemCount; i++) { if (vertical) { if (!hasChildSize) { if (i < stateItemCount) { // we should not exceed state count, otherwise we'll get IndexOutOfBoundsException. For such items // we will use previously calculated dimensions measureChild(recycler, i, widthSize, unspecified, childDimensions); } else { logMeasureWarning(i); } } height += childDimensions[CHILD_HEIGHT]; if (i == 0) { width = childDimensions[CHILD_WIDTH]; } if (hasHeightSize && height >= heightSize) { break; } } else { if (!hasChildSize) { if (i < stateItemCount) { // we should not exceed state count, otherwise we'll get IndexOutOfBoundsException. For such items // we will use previously calculated dimensions measureChild(recycler, i, unspecified, heightSize, childDimensions); } else { logMeasureWarning(i); } } width += childDimensions[CHILD_WIDTH]; if (i == 0) { height = childDimensions[CHILD_HEIGHT]; } if (hasWidthSize && width >= widthSize) { break; } } } if (exactWidth) { width = widthSize; } else { width += getPaddingLeft() + getPaddingRight(); if (hasWidthSize) { width = Math.min(width, widthSize); } } if (exactHeight) { height = heightSize; } else { height += getPaddingTop() + getPaddingBottom(); if (hasHeightSize) { height = Math.min(height, heightSize); } } setMeasuredDimension(width, height); if (view != null && overScrollMode == ViewCompat.OVER_SCROLL_IF_CONTENT_SCROLLS) { final boolean fit = (vertical && (!hasHeightSize || height < heightSize)) || (!vertical && (!hasWidthSize || width < widthSize)); ViewCompat.setOverScrollMode(view, fit ? ViewCompat.OVER_SCROLL_NEVER : ViewCompat.OVER_SCROLL_ALWAYS); } } private void logMeasureWarning(int child) { if (BuildConfig.DEBUG) { Log.w("MyLinearLayoutManager", "Can't measure child #" + child + ", previously used dimensions will be reused." + "To remove this message either use #setChildSize() method or don't run RecyclerView animations"); } } private void initChildDimensions(int width, int height, boolean vertical) { if (childDimensions[CHILD_WIDTH] != 0 || childDimensions[CHILD_HEIGHT] != 0) { // already initialized, skipping return; } if (vertical) { childDimensions[CHILD_WIDTH] = width; childDimensions[CHILD_HEIGHT] = childSize; } else { childDimensions[CHILD_WIDTH] = childSize; childDimensions[CHILD_HEIGHT] = height; } } @Override public void setOrientation(int orientation) { // might be called before the constructor of this class is called //noinspection ConstantConditions if (childDimensions != null) { if (getOrientation() != orientation) { childDimensions[CHILD_WIDTH] = 0; childDimensions[CHILD_HEIGHT] = 0; } } super.setOrientation(orientation); } public void clearChildSize() { hasChildSize = false; setChildSize(DEFAULT_CHILD_SIZE); } public void setChildSize(int childSize) { hasChildSize = true; if (this.childSize != childSize) { this.childSize = childSize; requestLayout(); } } private void measureChild(RecyclerView.Recycler recycler, int position, int widthSize, int heightSize, int[] dimensions) { final View child; try { child = recycler.getViewForPosition(position); } catch (IndexOutOfBoundsException e) { if (BuildConfig.DEBUG) { Log.w("MyLinearLayoutManager", "MyLinearLayoutManager doesn't work well with animations. Consider switching them off", e); } return; } final RecyclerView.LayoutParams p = (RecyclerView.LayoutParams) child.getLayoutParams(); final int hPadding = getPaddingLeft() + getPaddingRight(); final int vPadding = getPaddingTop() + getPaddingBottom(); final int hMargin = p.leftMargin + p.rightMargin; final int vMargin = p.topMargin + p.bottomMargin; // we must make insets dirty in order calculateItemDecorationsForChild to work makeInsetsDirty(p); // this method should be called before any getXxxDecorationXxx() methods calculateItemDecorationsForChild(child, tmpRect); final int hDecoration = getRightDecorationWidth(child) + getLeftDecorationWidth(child); final int vDecoration = getTopDecorationHeight(child) + getBottomDecorationHeight(child); final int childWidthSpec = getChildMeasureSpec(widthSize, hPadding + hMargin + hDecoration, p.width, canScrollHorizontally()); final int childHeightSpec = getChildMeasureSpec(heightSize, vPadding + vMargin + vDecoration, p.height, canScrollVertically()); child.measure(childWidthSpec, childHeightSpec); dimensions[CHILD_WIDTH] = getDecoratedMeasuredWidth(child) + p.leftMargin + p.rightMargin; dimensions[CHILD_HEIGHT] = getDecoratedMeasuredHeight(child) + p.bottomMargin + p.topMargin; // as view is recycled let's not keep old measured values makeInsetsDirty(p); recycler.recycleView(child); } private static void makeInsetsDirty(RecyclerView.LayoutParams p) { if (!canMakeInsetsDirty) { return; } try { if (insetsDirtyField == null) { insetsDirtyField = RecyclerView.LayoutParams.class.getDeclaredField("mInsetsDirty"); insetsDirtyField.setAccessible(true); } insetsDirtyField.set(p, true); } catch (NoSuchFieldException e) { onMakeInsertDirtyFailed(); } catch (IllegalAccessException e) { onMakeInsertDirtyFailed(); } } private static void onMakeInsertDirtyFailed() { canMakeInsetsDirty = false; if (BuildConfig.DEBUG) { Log.w("MyLinearLayoutManager", "Can't make LayoutParams insets dirty, decorations measurements might be incorrect"); } } } 

अद्यतन करें: यह उत्तर अब दिनांकित हो गया है क्योंकि नेस्टेड स्क्रॉलव्यू और रीसाइक्लरदृश्य जैसे विजेट्स नेस्टेड स्क्रॉलिंग का समर्थन किया है।

आपको एक स्क्रॉल करने योग्य दृश्य को किसी अन्य स्क्रॉल दृश्य के अंदर कभी नहीं लगाया जाना चाहिए!

मैं सुझाव देता हूं कि आप अपने मुख्य लेआउट रीसाइक्लर को देखने और अपने विचारों को रीसाइक्लर दृश्य के आइटम के रूप में प्रस्तुत करते हैं।

इस उदाहरण पर एक नज़र डालें यह दर्शाता है कि रीसाइक्लर व्यू एडेप्टर के अंदर कई दृश्य कैसे उपयोग करें। उदाहरण के लिए लिंक

मुझे भी यही समस्या आ रही थी। यही मैंने कोशिश की और यह काम करता है। मैं अपने XML और जावा कोड साझा कर रहा हूँ उम्मीद है कि यह किसी को मदद करेगा

यहाँ xml है

 <?xml version="1.0" encoding="utf-8"?> 

 <ScrollView android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:id="@+id/iv_thumbnail" android:layout_width="match_parent" android:layout_height="200dp" /> <TextView android:id="@+id/tv_description" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Description" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Buy" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Reviews" /> <android.support.v7.widget.RecyclerView android:id="@+id/rc_reviews" android:layout_width="match_parent" android:layout_height="wrap_content"> </android.support.v7.widget.RecyclerView> </LinearLayout> </ScrollView> 

यहां संबंधित जावा कोड है यह एक सम्मोहन की तरह काम करता है।

 LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); recyclerView.setLayoutManager(linearLayoutManager); recyclerView.setNestedScrollingEnabled(false); 

आप इस तरह से या तो उपयोग कर सकते हैं:

इस रेखा को अपने रीसाइक्लर में देखें XML दृश्य:

  android:nestedScrollingEnabled="false" 

कोशिश, पुनरावृत्त आसानी से लचीला ऊंचाई के साथ स्क्रॉल किया जाएगा

उम्मीद है कि यह मदद मिलेगी

ऐसा लगता है कि NestedScrollView समस्या को हल करता है। मैंने इस लेआउट का उपयोग करके परीक्षण किया है:

 <android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/dummy_text" /> <android.support.v7.widget.CardView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="16dp" android:layout_marginRight="16dp" > <android.support.v7.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="wrap_content"/> </android.support.v7.widget.CardView> </LinearLayout> 

और यह बिना मुद्दों के काम करता है

वास्तव में RecyclerView का मुख्य उद्देश्य ListView और ScrollViewScrollView लिए क्षतिपूर्ति करना है। जो वास्तव में आप कर रहे हैं उसे करने के बजाय: ScrollView में RecyclerView बाद, मैं केवल एक RecyclerView सुझाव देता हूं जो कई प्रकार के बच्चों को संभाल सकता है।

सबसे पहले आपको ScrollView बजाय NestedScrollView उपयोग करना चाहिए और NestedScrollView अंदर RecyclerView डाल देना NestedScrollView

स्क्रीन की ऊंचाई और चौड़ाई को मापने के लिए कस्टम लेआउट क्लास का उपयोग करें:

 public class CustomLinearLayoutManager extends LinearLayoutManager { public CustomLinearLayoutManager(Context context, int orientation, boolean reverseLayout) { super(context, orientation, reverseLayout); } private int[] mMeasuredDimension = new int[2]; @Override public void onMeasure(RecyclerView.Recycler recycler, RecyclerView.State state, int widthSpec, int heightSpec) { final int widthMode = View.MeasureSpec.getMode(widthSpec); final int heightMode = View.MeasureSpec.getMode(heightSpec); final int widthSize = View.MeasureSpec.getSize(widthSpec); final int heightSize = View.MeasureSpec.getSize(heightSpec); int width = 0; int height = 0; for (int i = 0; i < getItemCount(); i++) { if (getOrientation() == HORIZONTAL) { measureScrapChild(recycler, i, View.MeasureSpec.makeMeasureSpec(i, View.MeasureSpec.UNSPECIFIED), heightSpec, mMeasuredDimension); width = width + mMeasuredDimension[0]; if (i == 0) { height = mMeasuredDimension[1]; } } else { measureScrapChild(recycler, i, widthSpec, View.MeasureSpec.makeMeasureSpec(i, View.MeasureSpec.UNSPECIFIED), mMeasuredDimension); height = height + mMeasuredDimension[1]; if (i == 0) { width = mMeasuredDimension[0]; } } } switch (widthMode) { case View.MeasureSpec.EXACTLY: width = widthSize; case View.MeasureSpec.AT_MOST: case View.MeasureSpec.UNSPECIFIED: } switch (heightMode) { case View.MeasureSpec.EXACTLY: height = heightSize; case View.MeasureSpec.AT_MOST: case View.MeasureSpec.UNSPECIFIED: } setMeasuredDimension(width, height); } private void measureScrapChild(RecyclerView.Recycler recycler, int position, int widthSpec, int heightSpec, int[] measuredDimension) { View view = recycler.getViewForPosition(position); recycler.bindViewToPosition(view, position); if (view != null) { RecyclerView.LayoutParams p = (RecyclerView.LayoutParams) view.getLayoutParams(); int childWidthSpec = ViewGroup.getChildMeasureSpec(widthSpec, getPaddingLeft() + getPaddingRight(), p.width); int childHeightSpec = ViewGroup.getChildMeasureSpec(heightSpec, getPaddingTop() + getPaddingBottom(), p.height); view.measure(childWidthSpec, childHeightSpec); measuredDimension[0] = view.getMeasuredWidth() + p.leftMargin + p.rightMargin; measuredDimension[1] = view.getMeasuredHeight() + p.bottomMargin + p.topMargin; recycler.recycleView(view); } } } 

और RecyclerView के गतिविधि / खंड में नीचे कोड लागू करें:

  final CustomLinearLayoutManager layoutManager = new CustomLinearLayoutManager(this, LinearLayoutManager.VERTICAL, false); recyclerView.setLayoutManager(layoutManager); recyclerView.setAdapter(mAdapter); recyclerView.setNestedScrollingEnabled(false); // Disables scrolling for RecyclerView, CustomLinearLayoutManager used instead of MyLinearLayoutManager recyclerView.setHasFixedSize(false); recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); int visibleItemCount = layoutManager.getChildCount(); int totalItemCount = layoutManager.getItemCount(); int lastVisibleItemPos = layoutManager.findLastVisibleItemPosition(); Log.i("getChildCount", String.valueOf(visibleItemCount)); Log.i("getItemCount", String.valueOf(totalItemCount)); Log.i("lastVisibleItemPos", String.valueOf(lastVisibleItemPos)); if ((visibleItemCount + lastVisibleItemPos) >= totalItemCount) { Log.i("LOG", "Last Item Reached!"); } } }); 

यदि रीसायकलदृश्य केवल स्क्रॉलव्यू के अंदर एक पंक्ति दिखाता है आपको सिर्फ अपनी पंक्ति की ऊंचाई android:layout_height="wrap_content" को सेट करने की आवश्यकता है android:layout_height="wrap_content"

आप आसानी से रीसायकल वाइव रोल बनाने के लिए LinearLayoutManager को ओवरराइड भी कर सकते हैं

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

माफ करना पार्टी के लिए देर हो चुकी है, लेकिन ऐसा लगता है कि एक और समाधान है जो आपके द्वारा उल्लिखित मामले के लिए पूरी तरह से काम करता है।

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

** समाधान जो मेरे लिए काम किया
नेस्टेड स्क्रॉल दृश्य का उपयोग wrap_content के रूप में ऊंचाई के साथ करें
एंड्रॉइड के साथ रीसाइक्लर देखें: layout_width = "match_parent"
एंड्रॉयड: layout_height = "wrap_content"
एंड्रॉयड: nestedScrollingEnabled = "false"
ऐप: लेआउटमेनैजर = "android.support.v7.widget.LinearLayoutManager" टूल्स: targetApi = "लॉलीपॉप"

और धारक लेआउट देखें
एंड्रॉयड: layout_width = "match_parent"
एंड्रॉइड: layout_height = "wrap_content" // आपकी पंक्ति सामग्री यहाँ जाती है

इसे इस्तेमाल करे। बहुत देर से उत्तर। लेकिन निश्चित रूप से भविष्य में किसी को भी मदद करें

अपने स्क्रॉल दृश्य को NestedScrollView पर सेट करें

 <android.support.v4.widget.NestedScrollView> <android.support.v7.widget.RecyclerView> </android.support.v7.widget.RecyclerView> </android.support.v4.widget.NestedScrollView> 

आपके रीसाइक्वेव में

 recyclerView.setNestedScrollingEnabled(false); recyclerView.setHasFixedSize(false); 

यहां मेरा काम समाधान है: रीसाइक्लर के लिए सामग्री ऊंचाई की बेहतर गणना और निर्धारित ऊंचाई निर्धारित करें।

  <ScrollView android:id="@+id/main_scroll_container" android:fillViewport="true" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:orientation="vertical" android:layout_height="wrap_content"> <android.support.v7.widget.RecyclerView android:id="@+id/product_results_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:persistentDrawingCache="none" android:alwaysDrawnWithCache="false" android:scrollbars="vertical"/> </LinearLayout> </ScrollView>