2015-12-17 16 views
19

Ho un NestedScrollView contenente un LinearLayout e un RecyclerView (entrambi all'interno di un RelativeLayout).NestedScrollView scorre in alto su Recyclerview ridimensionato

<android.support.design.widget.CoordinatorLayout 
    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.support.v4.widget.NestedScrollView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/scroll"> 

    <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:id="@+id/lay_account"> 


     <LinearLayout 
       android:orientation="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:background="@android:color/white" 
       android:paddingTop="10dp" 
       android:id="@+id/lay_total" 
       android:paddingBottom="10dp"> 

      <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="@string/total" 
        android:id="@+id/lblTotal" 
        android:textSize="@dimen/text_medium" 
        android:layout_marginLeft="20dp" 
        android:textColor="@color/dark_eurakostheme_color" 
        android:textStyle="bold"/> 


      <LinearLayout 
        android:orientation="horizontal" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:gravity="center_vertical|center_horizontal"> 

       <TextView 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:id="@+id/txtTotalAmount" 
         android:textSize="@dimen/text_extra_extra_large" 
         android:gravity="center_horizontal" 
         android:textColor="@color/eurakostheme_color"/> 

       <ImageView 
         android:layout_width="@dimen/icon_extra_extra_large" 
         android:layout_height="match_parent" 
         android:id="@+id/imageView3" 
         android:src="@drawable/coin_eurakos"/> 
      </LinearLayout> 

     </LinearLayout> 

     <View 
       android:layout_width="fill_parent" 
       android:layout_height="1dp" 
       android:id="@+id/divisor" 
       android:background="@color/dividerColor" 
       android:layout_alignBottom="@+id/lay_total"/> 

     <android.support.v7.widget.RecyclerView 
       android:layout_below="@id/lay_total" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:id="@+id/rclBasketAmounts" 
       android:background="@android:color/white" 
       android:padding="10dp"> 
     </android.support.v7.widget.RecyclerView> 

    </RelativeLayout> 

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

Dopo il caricamento dei dati nel RecyclerView, ho bisogno di cambiare è l'altezza a livello di codice in questo modo:

RelativeLayout.LayoutParams lay_params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 
    50 + ((int) (baskets.length * getResources().getDimension(R.dimen.list_height_small)))); 

lay_params.addRule(RelativeLayout.BELOW, lay_total.getId()); 
recyclerView.setLayoutParams(lay_params); 
recyclerView.setAdapter(new ListBasketAmountAdapter(baskets)); 

Il problema è quando i dati sono finito di caricare i rotoli NestedScrollView automaticamente scorre in cima RecyclerView, nascondendo il LinearLayout sopra di esso. Qualche idea?

Grazie.

+0

non si dovrebbe mai mettere un 'RecyclerView' in un' ScrollView'. –

+1

Hai trovato una soluzione per questo? Sto avendo lo stesso problema –

+0

non ancora, provato quasi tutto – kevings14

risposta

75

Dopo diversi giorni ho trovato una soluzione al problema. Hai solo bisogno di aggiungere il descendantFocusability nel primo layout sotto il ScrollView in questo modo:

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/lay_account" 
    android:descendantFocusability="blocksDescendants"> 
+0

Grazie, nel mio caso, dopo una lunga giornata di ricerca, la tua risposta ha risolto il problema, ma ho un LinearLayout verticale che contiene un ImageView di dimensioni fisse (che causa questo effetto). –

+1

Questa soluzione funziona, ma tieni presente che se c'è un 'EditText' nelle viste secondarie, non sarà focalizzabile. –

10

La soluzione data dalla opere kevings14 ma non era utile nel mio caso. Ho una RecyclerView + un paio di EditText sotto NestedScrollView, quando ho aggiunto

android:descendantFocusability="blocksDescendants" 

nel layout principale sotto vista di scorrimento. Non è stato possibile mettere a fuoco EditText.

Poi ho trovato questa soluzione, che ha funzionato per me.

<RelativeLayout 
    android:layout_width="match_parent" 
    android:focusable="true" 
    android:focusableInTouchMode="true" 
    android:layout_height="wrap_content"> 
2

Nel mio caso, io uso RecyclerView multipla all'interno NestedScrollView. Quindi non funziona per me. Così la mia soluzione è, quando il mio aggiornamento di dati completo quindi ho solo scorrere verso l'alto,

yourList.setAdapter(yourListAdapter); 

scrollView.post(new Runnable() { 
    @Override 
    public void run() { 
     scrollView.fullScroll(ScrollView.FOCUS_UP); 
     //scrollView.scrollTo(0,0); 
    } 
}); 
Problemi correlati