2016-05-18 16 views
64

Sto usando RecyclerView all'interno di NestedScrollView e funziona. Ma quando uso RecyclerView all'interno di LinearLayout o qualcosa del genere, scorre a velocità variabile a seconda del gesto. La scroll ascolta i gesti e se faccio scorrere solo un po ', poi scorre un po' mentre se faccio scorrere molto velocemente, quindi scorre molto velocemente. Ora il mio problema è che lo RecyclerView all'interno dello NestedScrollView scorre ma lo scorrimento veloce non funziona. Tuttavia faccio scorrere in alto veloce o lento, RecyclerView o NestedScrollView solo per scorrere un po '.Recyclerview all'interno di Scroll Scrolled di Scorrimento annidato, ma non scorre velocemente come una normale Panoramica di Recyclerview o Scrolled Nested

Come posso rendere il mio NestedScrollView o RecyclerView all'interno di quella vista di scorrimento scorrere a varie velocità?

+0

sì, è un problema –

+1

recyclerView.setNestedScrollingEnabled (false); Questo funziona davvero !! –

+0

https://stackoverflow.com/questions/27083091/recyclerview-inside-scrollview-is-not-working/45466603#45466603 La soluzione può essere trovata qui. – maruti060385

risposta

195

provare

recyclerView.setNestedScrollingEnabled(false); 
+8

Ma con questa impostazione, recyclerview non ricicla le visualizzazioni! Qual è la tua idea al riguardo? – MAY3AM

+0

Attualmente sto aggiungendo due o più viste di riciclo con diversi gestori di layout (come Layout lineare e Layout griglia) all'interno del mio layout che includono anche banner e altre viste. Quindi, per gestire la vista del riciclatore in questo modo, inserendo tutti questi nella risoluzione di Scorrimento nidificato per me. –

+0

Mi ha salvato un sacco di tempo, grazie per aver condiviso! – wax911

-5

Si dovrebbe avvolgere vista riciclatore in qualsiasi layout come LinearLayout e impostare le dimensioni RecyclerView ad una costante, come 800dp. Ciò consentirà una visualizzazione scorrevole e la visualizzazione del riciclatore continuerà a visualizzare i riciclatori durante lo scorrimento.

<android.support.v4.widget.NestedScrollView 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:orientation="vertical"> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <android.support.v7.widget.RecyclerView 
     android:layout_width="match_parent" 
     android:layout_height="800dp" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 
</LinearLayout> 

+0

Questa è una buona risposta perché indica il modo di risolvere il problema dello scroll fling senza interrompere il vantaggio principale di RecyclerView, caricando solo le viste visibili e riciclandole quando vengono fatte scorrere fuori dalla vista.Le persone potrebbero averlo down-votato perché un valore fisso come 800dp non funzionerà in tutte le dimensioni e gli orientamenti dello schermo, ma il valore di layout_height potrebbe essere calcolato e impostato a livello di codice - un po 'disordinato, ma risolve entrambi i problemi. – jk7

12

stavo lavorando su Android 16 in cui questo non è stato possibile utilizzare il metodo setNestedSCrollEnabled,

Quello che finisce per fare per fermare RecyclerView dalla manipolazione Scrolls.

Come in LinerLayoutManager ho creato canScrollHorizontally, canScrollVertically per restituire false per impostazione predefinita.

myRecyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false){ 
      @Override 
      public boolean canScrollHorizontally() { 
       return false; 
      } 

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

fantastico, grazie! –

+0

Questo ha funzionato davvero per me. Ho avuto un RecyclerView, all'interno di un LinearLinear, all'interno di un ScrollView. – FonzTech

24

Per impostazione predefinita, setNestedScrollingEnabled funziona solo dopo API-21.

È possibile utilizzare ViewCompat.setNestedScrollingEnabled(recyclerView, false); per disabilitare lo scorrimento annidato prima e dopo l'API-21 (Lollipop). Link to documentation.

Spero che questo aiuto!

+2

Questa dovrebbe essere la risposta accettata! Grazie –

-1

Questo è WAI. NestedScrollView misura i propri figli con la Spec "Non specificata". Il bambino può crescere quanto vuole anche lui.

Questo equivale sostanzialmente all'altezza di NSV e RV. Quindi, per quanto riguarda il camper, ritiene che sia completamente visualizzato.

Avvolgi il tuo camper con un LL e dai al tuo camper un'altezza. Il LL non imposterà le specifiche della misura in modo che non siano presenti, quindi il VIR scorrerà correttamente all'interno dell'altezza impostata di qualsiasi DP che fornisci.

L'unico svantaggio di questo metodo è che non sarà possibile eseguire una corrispondenza genitore sul proprio camper.

1

Dopo diverse iterazioni, ho trovato una soluzione.

  1. Se si utilizza RecyclerView, quindi:

    recyclerView.setNestedScrollingEnabled(false); 
    
  2. Se si utilizza LinearLayout all'interno NestedScrollingView, prendere la LinearLayout all'interno di una normale ScrollView e quindi impostare la sua scorrimento a

    scrollView.setNestedScrollingEnabled(false); 
    
0

È possibile utilizzare ScrollView con la classe ExtendRecyclerView che esegue l'override di onMeasure metodo. Per me va bene!

@Override 
protected void onMeasure(int widthSpec, int heightSpec) { 
    int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); 
    super.onMeasure(widthSpec, expandSpec); 
} 
0
recyclerView.setNestedScrollingEnabled(false); 

sarà utile sometimes.But non è consigliabile per tutte le times.because disabilita funzione riciclaggio vista in vista recylcer.

Alternative:

provare CollapsiveToolbarLayout con vista Recycler. metti altre viste nel layout collaborativo.

Problemi correlati