2015-10-08 15 views
5

के अंदर रीसाइक्लर व्यू के साथ वर्कपेजर कैसे काम कर सकता हूं मैं ViewPager के साथ NestedScrollView का उपयोग कर रहा हूं। NestedScrollView में अंत में कुछ TextViews, TabLayout और ViewPager के साथ एक LinearLayout है। टेक्स्ट व्यू अधिकांश जगह पर कब्जा करते हैं और ViewPager के लिए थोड़ी सी जगह छोड़ दी जाती है। दो टुकड़ों का उपयोग करके ViewPager, उनमें से एक में कुछ टेक्स्ट व्यू और छवि दृश्य हैं और एक अन्य खंड में एक RecyclerView है।मैं NestedScrollView

जब मैं WRAP_CONTENT को ViewPager की ऊंचाई सेट यह केवल अंतरिक्ष कि छोड़ दिया लेता है और मैं पहली बार टुकड़ा के बाकी है, और छोटी ViewPager अंदर दूसरा टुकड़ा स्क्रॉल देखने के लिए स्क्रॉल नहीं कर सकते।

जब मैं व्यूपेगर की ऊंचाई 1000 डीपी पर सेट करता हूं, उदाहरण के लिए, मैं पहले खंड पर स्क्रॉल करने में सक्षम हूं, लेकिन दूसरा खंड अभी भी थोड़ा ViewPager के अंदर स्क्रॉल कर रहा है। और जब मैं पहली फ्रैगमेंट में रीसाइक्लर व्यू स्कॉल के साथ खंड में स्क्रॉल करता हूं तो अब और काम नहीं कर रहा है।

मैं स्क्रॉलिंग समस्या को कैसे ठीक कर सकता हूं और WRAP_CONTENT के साथ ViewPager काम कैसे कर सकता हूं?

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 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:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" /> 

    </android.support.design.widget.AppBarLayout> 

    <android.support.v4.widget.NestedScrollView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" 
     app:layout_scrollFlags="scroll" 
     android:fillViewport="true"> 

     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="@color/mainBackground" 
      android:orientation="vertical"> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="SOME TEXT" /> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="SOME TEXT" /> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="SOME TEXT" /> 

      <android.support.design.widget.TabLayout 
       android:id="@+id/tabLayout" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" /> 

      <android.support.v4.view.ViewPager 
       android:id="@+id/viewPager" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" /> 

     </LinearLayout> 

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

</android.support.design.widget.CoordinatorLayout> 
+0

हाय, क्या आपको टी मिल गया काम करने के लिए? मैंने fillViewport को आजमाया है, लेकिन यह नेस्टेड स्क्रॉलव्यू को व्यूपोर्ट ऊंचाई पर छोटा कर रहा है और रीसाइक्लर नेस्टेड-स्क्रॉलिंग है। नेस्टेड स्क्रॉल को अक्षम करके, यहां तक ​​कि nestedscrollview स्क्रॉल नहीं कर रहा है (जो अजीब है)। कृपया साझा करें, अगर आप इसे काम कर सकते हैं। –

उत्तर

1

हो सकता है आप कोशिश कर सकते हैं:

NestedScrollView scrollView = (NestedScrollView) findViewById (R.id.nest_scrollview); 
    scrollView.setFillViewport (true); 

जैसे:

यहाँ मेरी कोड है https://stackoverflow.com/a/33385207/4035627

+0

यह दृश्य पेजर दृश्यमान बनाता है, लेकिन रीसाइक्लिंग स्क्रॉलिंग के लिए पर्याप्त नहीं है –

4

मुझे लगता है कि आप इस तरह ViewPager ओवरराइड करना चाहिए:

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 

    int height = 0; 
    for (int i = 0; i < getChildCount(); i++) { 
     View child = getChildAt(i); 
     child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 
     int h = child.getMeasuredHeight(); 
     if (h > height) height = h; 
    } 
    heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
} 
संबंधित मुद्दे