Distriggers Scorrimento nel bambino Recyclerview android

Ho un layout composto da un Genitore RecyclerView con un Recyclerview sub

so che non è bello mettere un elenco all'interno di un altro elenco, ma devo in modo da poter utilizzare le funzionalità di sottosistema come spostamento e trascinamento e rilascio

  • Sony SmartWatch - come get il nome del pacchetto dell'host host
  • Problemi di invio di file multipart con limite via volley
  • Lo studio di Android prende troppa memory
  • Creazione di un TextView multilinea
  • GpsStatus.Listener funziona solo se il GPS è acceso
  • Layer-List con elementi che hanno properties; top / bottom
  • Il mio problema è che il Recyclerview del bambino acquisisce la messa a fuoco e ferma il genitore da scorrere se il touch è stato su di esso semplicemente voglio se il touch era verticale sul figlio Recyclerview il genitore scorre su e giù e se il touch era orizzontale o un clic poi l'elemento dell'elenco Recyclerview del bambino passa a sinistra ea destra. Qualsiasi aiuto per raggiungere questo objective?

  • Qualcuno ha visto o conosce la causa di questo messaggio di errore? L'emulatore Android non verrà avviato
  • Android - Legge un file XML con HTTP GET
  • Rimuovere l'icona ma avere HomeAsUp in ActionBar
  • come accedere a un elenco di frammenti di un'altra attività?
  • Streaming di Android Audio m3u8 - COME
  • Come hide il button di chiusura nella visualizzazione di ricerca per impostazione predefinita?
  • 7 Solutions collect form web for “Distriggers Scorrimento nel bambino Recyclerview android”

    Ho finalmente trovato una soluzione.

    Crea Custom LinearLayoutManager

    public class CustomLinearLayoutManager extends LinearLayoutManager { public CustomLinearLayoutManager(Context context, int orientation, boolean reverseLayout) { super(context, orientation, reverseLayout); } // it will always pass false to RecyclerView when calling "canScrollVertically()" method. @Override public boolean canScrollVertically() { return false; } } 

    Quindi istanziarlo in questo modo per lo scorrimento verticale

     CustomLinearLayoutManager customLayoutManager = new CustomLinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false); 

    Infine impostare il layout personalizzato come gestore di layout della visualizzazione del riciclatore

     recyclerView.setLayoutManager(customLayoutManager); 

    Anche se potrebbe non essere una buona pratica di avere incorporate le viste del riciclatore, a volte non puoi evitare. Qualcosa di simile potrebbe funzionare:

     public class NoScrollRecycler extends RecyclerView { public NoScrollRecycler(Context context){ super(context); } public NoScrollRecycler(Context context, AttributeSet attrs){ super(context, attrs); } public NoScrollRecycler(Context context, AttributeSet attrs, int style){ super(context, attrs, style); } @Override public boolean dispatchTouchEvent(MotionEvent ev){ //Ignore scroll events. if(ev.getAction() == MotionEvent.ACTION_MOVE) return true; //Dispatch event for non-scroll actions, namely clicks! return super.dispatchTouchEvent(ev); } } 

    Questo disattiverà l'evento di scorrimento, ma non gli events di click. Utilizza questa class per il "figlio" RecyclerView. Vuoi scorrere il riciclaggio PARENT, ma non il bambino. Beh questo dovrebbe farlo, poiché il genitore sarà solo il RecyclerView standard, ma il bambino sarà quello personalizzato senza scorrere, ma gestisce i clic. Potrebbe essere necessario disabilitare clic per il genitore RecyclerView. Non sicuro dato che non ho provato questo, quindi consideratelo un esempio …

    Inoltre, per utilizzarlo in XML (che non lo sapevi) effettuare le seguenti operazioni:

     <com.yourpackage.location.NoScrollRecycler ... ... > ... ... </com.yourpackage.location.NoScrollRecycler> 

    Nella tua AttivitàName.java, all'interno del metodo onCreate () scrivere:

     RecyclerView v = (RecyclerView) findViewById(R.id.your_recycler_view_id); v.setNestedScrollingEnabled(false); 

    In each modo, se si utilizza il layout del coordinatore, nel caso si desideri semplificare le cose e si desidera distriggersre lo scorrimento nidificato.

      <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <android.support.v7.widget.RecyclerView android:id="@+id/activitiesListRV" android:layout_width="match_parent" android:layout_height="wrap_content"/> </android.support.v4.widget.NestedScrollView> 

    E di nuovo si applica lo stesso principio: Nella tua attivitàName.java, all'interno del metodo onCreate () scrivere:

     RecyclerView v = (RecyclerView) findViewById(R.id.your_recycler_view_id); v.setNestedScrollingEnabled(false); 

    Quindi, fondamentalmente in XML, devi specificare l'applicazione: layout_behavior

     app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

    android:nestedScrollingEnabled="false" nel bambino RecyclerView

    Puoi aggiungere

     android:nestedScrollingEnabled="false" 

    al tuo RecyclerView in XML o

     childRecyclerView.setNestedScrollingEnabled(false); 

    al tuo RecyclerView in Java.

    EDIT: –

    childRecyclerView.setNestedScrollingEnabled(false); functionrà solo in android_version> 21 dispositivi. per funzionare in tutti i dispositivi utilizzare quanto segue

     ViewCompat.setNestedScrollingEnabled(childRecyclerView, false); 

    è ansible utilizzare setNestedScrollingEnabled (false); sulla visualizzazione sub recycler che smette di scorrere all'interno della visualizzazione sub recycler. Nel mio caso il codice era

    mInnerRecyclerView.setNestedScrollingEnabled (false); where mInnerRecyclerView è riciclaggio interno

    Ho provato molte soluzioni suggerite e non ho trovato quello che ha funzionato nel mio caso. Ho più di 1 RecyclerView all'interno di uno ScrollView utilizzando un GridLayoutManager. Il risultato del suggerimento precedente ha causato lo scorrimento di ScrollView per scorrere each volta che ho sollevato il dito (non è scivolato in alto o in basso alla vista quando il mio dito è stato sollevato su un RecyclerView)

    Guardando attraverso la sorgente RecyclerView, all'interno della onTouchEvent c'è una chiamata al gestore di layout:

     final boolean canScrollHorizontally = mLayout.canScrollHorizontally(); final boolean canScrollVertically = mLayout.canScrollVertically(); 

    Se lo sovrascrivi in ​​un gestore di layout personalizzato, restituisci falso e interromperà lo scorrimento. Risolve anche il problema in cui lo ScrollView smetterebbe di scorrere bruscamente.

    Se non si desidera creare una visualizzazione personalizzata, un'altra opzione è creare un layout di size uguali davanti al RecyclerView e renderlo cliccabile.

    EDIT: Ma purtroppo blocca gli events per l'elemento dell'elenco.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.