2017-08-05 1 views
0

Ich habe ein Problem mit meinem recyclerview. Ich habe Funktion, die Artikel in der Liste entfernen. Wenn der letzte Artikel nicht angezeigt wurde, hatte es gut funktioniert. Aber wenn das letzte Element am Ende des Bildschirms (Liste) angezeigt wurde, habe ich einen Fehler, nachdem ich das Element aus der Liste entfernt habe.RecyclerView Fehler beim Entfernen des letzten Elements in der Liste

Das ist mein logcat:

java.lang.IllegalArgumentException: Scrapped or attached views may not be recycled. isScrap:false isAttached:true 
at android.support.v7.widget.RecyclerView$Recycler.recycleViewHolderInternal(RecyclerView.java:5778) 
at android.support.v7.widget.RecyclerView$Recycler.quickRecycleScrapView(RecyclerView.java:5885) 
at android.support.v7.widget.RecyclerView$LayoutManager.removeAndRecycleScrapInt(RecyclerView.java:8547) 
at android.support.v7.widget.RecyclerView.dispatchLayoutStep3(RecyclerView.java:3698) 
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3365) 
at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3886) 
at android.view.View.layout(View.java:15664) 
at android.view.ViewGroup.layout(ViewGroup.java:4869) 
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1055) 
at android.view.View.layout(View.java:15664) 
at android.view.ViewGroup.layout(ViewGroup.java:4869) 
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 
at android.widget.FrameLayout.onLayout(FrameLayout.java:388) 
at android.view.View.layout(View.java:15664) 
at android.view.ViewGroup.layout(ViewGroup.java:4869) 
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677) 
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531) 
at android.widget.LinearLayout.onLayout(LinearLayout.java:1440) 
at android.view.View.layout(View.java:15664) 
at android.view.ViewGroup.layout(ViewGroup.java:4869) 
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 
at android.widget.FrameLayout.onLayout(FrameLayout.java:388) 
at android.view.View.layout(View.java:15664) 
at android.view.ViewGroup.layout(ViewGroup.java:4869) 
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677) 
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531) 
at android.widget.LinearLayout.onLayout(LinearLayout.java:1440) 
at android.view.View.layout(View.java:15664) 
at android.view.ViewGroup.layout(ViewGroup.java:4869) 
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 
at android.widget.FrameLayout.onLayout(FrameLayout.java:388) 
at android.view.View.layout(View.java:15664) 
at android.view.ViewGroup.layout(ViewGroup.java:4869) 
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2246) 
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1968) 
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1200) 
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6401) 
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:803) 
at android.view.Choreographer.doCallbacks(Choreographer.java:603) 
at android.view.Choreographer.doFrame(Choreographer.java:573) 
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:789) 
at android.os.Handler.handleCallback(Handler.java:733) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:157) 
at android.app.ActivityThread.main(ActivityThread.java:5335) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) 
at dalvik.system.NativeStart.main(Native Method) 

entferne ich Artikel wie folgt aus:

public void delete(Entity entity) { 
     entities.remove(entity); 
     notifyDataSetChanged(); 
} 

Was hier los? Haben Sie einen Vorschlag für mein Problem? Vielen Dank!

Ich denke, kann die Ursache für diesen Fehler sein, entfernen Sie Element, das ich aus Dispoable von RX-Thread aufgerufen? Wenn ich Artikel in meiner Aktivität entferne, ist es in Ordnung.

+0

Haben Sie [diese] (https://stackoverflow.com/a/26479862/2910520) überprüft? – MatPag

+0

@MatPag Yeap. Ich tat. Mein XML-Layout hat nicht 'android: animateLayoutChanges'. –

+0

@PhanSinh, hat das Element in Ihrem 'RecyclerView'' EditText'? – azizbekian

Antwort

0

Sie können notifyItemRangeChanged oder notifyItemChanged Methode RecyclerView Adapter verwenden.

+0

Ich erhalte immer noch diesen Fehler, wenn ich' notifyItem ... 'Methode nicht aufrufen. Als der letzte Artikel nicht angezeigt wurde, hatte es gut funktioniert. Aber wenn das letzte Element am Ende des Bildschirms (Liste) angezeigt wurde, habe ich einen Fehler, nachdem ich das Element aus der Liste entfernt habe. –

Verwandte Themen