Recyclerview all'interno dello scorrimento di Scrollview annidato ma non scorre velocemente come normale Recyclerview o Scrollview annidato


96

Sto usando RecyclerViewdentro NestedScrollViewe funziona. Ma quando uso RecyclerViewall'interno LinearLayouto qualcosa del genere, scorre a varie velocità a seconda del gesto. Lo scorrimento ascolta il gesto e se faccio scorrere solo un po ', poi scorre un po' mentre se faccio scorrere verso l'alto molto velocemente, quindi scorre molto velocemente. Ora il mio problema è che RecyclerViewall'interno NestedScrollViewsicuramente lo scorrimento ma lo scorrimento veloce non funziona. Tuttavia, scorro velocemente o lentamente, RecyclerViewo NestedScrollViewscorro solo un po '.

Come posso far scorrere la mia NestedScrollViewo RecyclerViewall'interno di quella visualizzazione a scorrimento a varie velocità?


3
recyclerView.setNestedScrollingEnabled (false); Funziona davvero !!
Aung Si Min Htet

stackoverflow.com/questions/27083091/… La soluzione può essere trovata qui.
maruti060385

Risposte:


266

provare

recyclerView.setNestedScrollingEnabled(false);

14
Ma con questa impostazione, Recyclerview non ricicla le visualizzazioni! qual è la tua idea al riguardo?
MAGGIO

In realtà sto aggiungendo due o più visualizzazioni riciclatore con diversi gestori di layout (come layout lineare e layout a griglia) all'interno del mio layout che includono anche banner e altre visualizzazioni. Quindi, per gestire la visualizzazione del riciclatore in questo modo, inserendo tutti questi nella correzione della visualizzazione a scorrimento annidata per me.
Aung Si Min Htet

24
Non so come questa risposta abbia ottenuto così tanti voti positivi. Se si disabilita lo scorrimento annidato, il suo scopo è vanificato. E se volessi usare pergamene nidificate e riciclatore? Qualcosa come CoordinatorLayout, AppBarLayout e RecyclerView ??
Jimit Patel

Grazie @JimitPatel, questo è esattamente il mio problema al momento. Ho una visualizzazione del riciclo all'interno di una visualizzazione nestedscroll e non riesco a scorrere. stackoverflow.com/questions/41259756/…
Karoly,

1
@Karoly ha bisogno di personalizzare le pergamene annidate ... Ho quello ... Lo posterò tra poche ore ... Attualmente sto viaggiando. Ho affrontato questo problema in effetto di parallasse con la visualizzazione riciclatore dopo la barra degli strumenti.
Jimit Patel

53

Per impostazione predefinita, setNestedScrollingEnabledfunziona solo dopo l'API-21.

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

Spero che questo aiuto!


22

Stavo lavorando su Android 16 in cui non era possibile utilizzare il metodo setNestedSCrollEnabled,

Quello che finisco per fare per impedire a RecyclerView di gestire le pergamene.

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;
            }
        });

Questo in realtà ha funzionato per me. Avevo un RecyclerView, all'interno di un LinearLinear, all'interno di un ScrollView.
FonzTech

9

Dopo diverse iterazioni, ho trovato una soluzione.

  1. Se stai usando RecyclerView, allora:

    recyclerView.setNestedScrollingEnabled(false);
  2. Se stai usando LinearLayout all'interno di NestedScrollingView, prendi il LinearLayout all'interno di un normale ScrollView e quindi imposta il suo scorrimento su

    scrollView.setNestedScrollingEnabled(false);

2

android: overScrollMode = "mai

  <android.support.v4.widget.NestedScrollView
    android:id="@+id/nestedScrollView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:overScrollMode="never">


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

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

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

1

È possibile utilizzare ScrollView con la classe ExtendRecyclerView che sostituisce il metodo onMeasure. 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);
}

1
recyclerView.setNestedScrollingEnabled(false);

A volte sarà utile, ma non è sempre consigliabile perché disabilita la funzione di riciclo di visualizzazione nella visualizzazione del riciclo.

Alternative:

Prova CollapsiveToolbarLayout con la visualizzazione Recycler. mettere altre visualizzazioni nel layout collapsiveTollbar.


0

Ho anche incontrato questo problema. E aggiorna per 26.1.0risolverlo.


-1

Nel mio caso ho inserito tutte le immagini nella cartella disegnabile invece della cartella drawable-xxxhdpi, ecco perché la mia interfaccia utente dello schermo è in ritardo.


-3

Dovresti avvolgere la vista Recycler in qualsiasi layout come LinearLayout e impostare la dimensione di RecyclerView su costante, come 800dp. Ciò consentirà lo scorrimento uniforme e la visualizzazione riciclatore continuerà a visualizzare le visualizzazioni riciclatore 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>


1
Questa è una buona risposta perché indica la strada per risolvere il problema dello scorrimento del lancio 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 sconsigliato perché un valore fisso come 800dp non funzionerà in tutte le dimensioni e orientamenti dello schermo, ma il valore layout_height potrebbe essere calcolato e impostato a livello di programmazione - un po 'disordinato, ma risolve entrambi i problemi.
jk7

-3

Questa è WAI. NestedScrollView misura i suoi figli con la specifica "Unspecified". Anche il bambino può crescere quanto vuole.

Ciò equivale essenzialmente 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 imposterebbe la specifica di misura come NON SPECIFICO, quindi il camper scorrerà correttamente entro la sua altezza impostata di qualunque DP tu fornisca.

L'unico svantaggio di questo metodo è che non sarai in grado di fare una partita genitore sul tuo camper.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.