2015-10-08 17 views
5

Sto usando NestedScrollView con ViewPager. NestedScrollView ha un LinearLayout all'interno con alcune TextViews, TabLayout e ViewPager alla fine. TextView occupa la maggior parte dello spazio e ViewPager ha lasciato un po 'di spazio. ViewPager utilizza due frammenti, in uno di essi ci sono alcuni TextViews e ImageViews e in un altro frammento c'è un RecyclerView.Come posso rendere ViewPager di lavoro con RecyclerView all'interno di NestedScrollView

Quando ho impostato l'altezza di ViewPager su WRAP_CONTENT, ci vuole solo lo spazio rimasto e non posso scorrere per vedere il resto del primo frammento, e il secondo frammento scana all'interno del piccolo ViewPager.

Quando ho impostato l'altezza di ViewPager su 1000 dpi, ad esempio, sono in grado di scorrere verso il basso sul primo frammento, ma il secondo frammento continua a scorrere all'interno del piccolo ViewPager. E dopo aver fatto scorrere frammento con RecyclerView, il primo frammento non funziona più.

Come posso risolvere il problema di scorrimento e far funzionare ViewPager con WRAP_CONTENT?

Ecco il mio codice:

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

Ciao, hai preso t il suo a lavorare? Ho provato fillViewport ma sta troncando la scrollview annidata all'altezza del viewport e il recycler è a scorrimento nidificato. Disabilitando lo scroll annidato, anche il nestedscrollview non scorre (che è strano). Si prega di condividere come, se si potesse farlo funzionare. –

risposta

1

forse si può provare:

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

come ad esempio: https://stackoverflow.com/a/33385207/4035627

+0

rende visibile viewPager, ma non è sufficiente per lo scorrimento del recycler –

4

penso che si dovrebbe ignorare ViewPager come questo:

@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); 
} 
Problemi correlati