5

Die RecyclerView vermasselt, wenn mit Marshmallow (Android 23) gebaut.Marshmallow (23) + RecyclerView (23.1.0) Scrollen vermasselt Inhalt oben nach dem Entfernen des Elements (notifyItemRemoved)

Ich benutze RecyclerView mit einer Liste von Elementen gefüllt und wenn swiped nach rechts wird das Element entfernen. Das Entfernen des Artikels funktioniert einwandfrei. Wenn Sie jedoch nach dem Entfernen eines Objekts auf der RecyclerView nach oben scrollen, wird auf dem Objekt über dem entfernten Objekt ein leerer Bereich erstellt.

Ich bin mit dem Beispielprojekt hier https://github.com/chrisbanes/cheesesquare mit der neuesten Android-Version (Eibisch)

android { 
compileSdkVersion 23 
buildToolsVersion "23.0.1" 

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

und fügen Sie die Swipe-Code zu entlassen

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

Der Adapter das Verfahren hat removeItemAt zu entfernen Artikel

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

Alles wor dieses ks gut, wenn compileSdkVersion 22 und targetSdkVersion 22 mit com.android.support:recyclerview-v7:22.2.0

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

Lassen Sie mich wissen, ob jemand dieses Problem hatte.

+0

Können Sie den Aufruf 'removeItemAt include()'? Ruft es [notifyItemRemoved()] (https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html#notifyItemRemoved (int)) auf? – ianhanniballake

+0

Ich stoße auch auf dieses Problem ... Ich bin froh, dass es nicht nur ich ist. Ich dachte, ich würde verrückt werden. –

+0

Glat zu wissen, dass es bald behoben wird. Für den Moment, wenn Sie 'DefaultItemAnimator' mit Ihrer eigenen Dummy-Klasse ändern, die 'RecyclerView.ItemAnimator' erweitert, verschwindet das Problem, Sie erhalten jedoch keine Animationen. mRecyclerView.setItemAnimator() – feresr

Antwort

3

Ich habe dieses Problem auch aufgetreten. Es scheint nur ein Problem mit support lib 23.1.0 zu sein. Ich stoße nicht auf das Problem mit com.android.support:recyclerview-v7:23.0.1. Ich habe diesen Fehler bei Google eingereicht https://code.google.com/p/android/issues/detail?id=191960

Sieht aus wie das Update auf dem Weg: https://code.google.com/p/android/issues/detail?id=190500

+0

Ich sehe das gleiche Verhalten mit 23.0.1. Sind Sie sicher, dass targetSdkVersion und compileSdkVersion 23 sind? – Libin

+0

@Libin Ja, targetSdk und compileSdk sind beide 23. Es scheint eine Abhängigkeit zwischen der Design-Bibliothek und der Recycler-Ansicht zu geben. Stellen Sie sicher, dass Sie Ihre Design-Lib auch auf 23.0.1 setzen. "compile 'com.android.support:design:23.0.1'" – GFred

+1

@GFed. Ja. Es funktioniert mit 23.0.1. Vielen Dank . Bitte lassen Sie mich wissen, wenn Sie von Google auf den Fehler zurück hören. – Libin

Verwandte Themen