2015-10-08 2 views
5

Я использую NestedScrollView с ViewPager. NestedScrollView имеет LinearLayout внутри с некоторыми TextViews, TabLayout и ViewPager в конце. TextViews занимают большую часть пространства, а для ViewPager осталось немного места. ViewPager использует два фрагмента, в одном из них есть несколько TextViews и ImageViews, а в другом фрагменте есть RecyclerView.Как я могу сделать работу ViewPager с RecyclerView внутри NestedScrollView

Когда я устанавливаю высоту ViewPager в WRAP_CONTENT, это занимает только оставшееся пространство, и я не могу прокрутить, чтобы увидеть остальную часть первого фрагмента, а второй фрагмент scoll внутри маленького ViewPager.

Когда я устанавливаю высоту ViewPager до 1000dp, например, я могу прокрутить вниз по первому фрагменту, но второй фрагмент все еще прокручивается внутри небольшого ViewPager. И после того, как я прокручиваю фрагмент с помощью Scycycle RecyclerView в первом фрагменте, который больше не работает.

Как исправить проблему прокрутки и заставить ViewPager работать с WRAP_CONTENT?

Вот мой код:

<?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

Привет, вы получили t его работать? Я попробовал fillViewport, но он усекает вложенное scrollview до высоты видового экрана, а recycler - вложенной-прокруткой. Отключив вложенную прокрутку, даже вложенное scrollview не прокручивается (что странно). Расскажите, как, если бы вы могли заставить его работать. –

ответ

1

может быть, вы можете попробовать:

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

, такие как: https://stackoverflow.com/a/33385207/4035627

+0

это делает viewPager видимым, но этого недостаточно для прокрутки ресайклеров –

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); 
} 
Смежные вопросы