2015-10-29 11 views
5

Il RecyclerView incasinato se build con Marshmallow (Android 23).Marshmallow (23) + RecyclerView (23.1.0) scorrimento rovina il contenuto sopra dopo l'elemento rimosso (notifyItemRemoved)

Io utilizzo RecyclerView pieno di un elenco di elementi e quando il tasto destro viene rimosso l'elemento. Rimuovere l'oggetto funziona correttamente. Ma dopo aver rimosso un elemento, lo scorrimento su RecyclerView crea uno spazio vuoto sull'elemento sopra quello rimosso.

sto usando il progetto di esempio qui https://github.com/chrisbanes/cheesesquare con l'ultima versione di Android (Marshmallow)

android { 
compileSdkVersion 23 
buildToolsVersion "23.0.1" 

defaultConfig { 
    applicationId "com.support.android.designlibdemo" 
    minSdkVersion 9 
    targetSdkVersion 23 
    versionCode 1 
    versionName "1.0" 
} 
} 

E aggiungere il colpo di licenziare il codice

private void setItemDismiss(final RecyclerView recyclerView) { 
    ItemTouchHelper.SimpleCallback simpleCallback = new ItemTouchHelper.SimpleCallback(ItemTouchHelper.RIGHT, ItemTouchHelper.RIGHT) { 
     @Override 
     public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { 
      return false; 
     } 

     @Override 
     public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { 
      int position = viewHolder.getAdapterPosition(); 
      ((SimpleStringRecyclerViewAdapter)recyclerView.getAdapter()).removeItemAt(position); 
     } 
    }; 

    ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleCallback); 
    itemTouchHelper.attachToRecyclerView(recyclerView); 
} 

L'adattatore ha il metodo per rimuovere removeItemAt voce

public void removeItemAt(int position) { 
     mValues.remove(position); 
     notifyItemRemoved(position); 
    } 

Tutto wor ks bene se compileSdkVersion 22 e targetSdkVersion 22 con com.android.support:recyclerview-v7:22.2.0

Controllare questo: https://www.youtube.com/watch?v=AbiFzDzFwjo&feature=youtu.be

fatemi sapere se qualcuno ha avuto questo problema.

+0

Puoi includere l'invito a 'removeItemAt()'? Chiama [notifyItemRemoved()] (https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html#notifyItemRemoved (int))? – ianhanniballake

+0

Sto incontrando anche questo problema ... Sono contento che non sono solo io. Pensavo stavo impazzendo. –

+0

Glat per sapere che verrà risolto presto. Per ora, se cambi "DefaultItemAnimator" con la tua classe dummy estendendo "RecyclerView.ItemAnimator" il problema scompare, non ottieni comunque animazioni. mRecyclerView.setItemAnimator() – feresr

risposta

3

Ho riscontrato anche questo problema. Sembra essere solo un problema con il supporto di lib 23.1.0. Non ho riscontrato problemi con com.android.support:recyclerview-v7:23.0.1. Ho presentato questo bug di Google https://code.google.com/p/android/issues/detail?id=191960

Sembra che la correzione è sulla buona strada: https://code.google.com/p/android/issues/detail?id=190500

+0

Sto vedendo lo stesso comportamento con 23.0.1. Sei sicuro che targetSdkVersion e compileSdkVersion siano 23? – Libin

+0

@Libin Sì, targetSdk e compileSdk sono entrambi 23. Sembra esserci una dipendenza tra la lib design e il recyclerview. Assicurati di impostare anche la tua lib di progettazione su 23.0.1. "compile 'com.android.support:design:23.0.1'" – GFred

+1

@GFed. Sì. Funziona con 23.0.1. Grazie . Per favore fatemi sapere se avete notizie da Google sul bug. – Libin

Problemi correlati