Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[5.0.0-b6] Crash during animation (with sticky headers) #78

Closed
tprochazka opened this issue May 9, 2016 · 14 comments
Closed

[5.0.0-b6] Crash during animation (with sticky headers) #78

tprochazka opened this issue May 9, 2016 · 14 comments

Comments

@tprochazka
Copy link

I tried to integrate FlexibleAdapter because of support for sticky headers and my app start crashing on this error, sometimes when I enter to the screen with RecyclerView. Before I used own adapter implementation without sticky headers and it works correctly. I'm not using any animation for RecyclerVIew. So I don't understand why it happen.

java.lang.ClassCastException: android.widget.FrameLayout$LayoutParams cannot be cast to android.support.v7.widget.RecyclerView$LayoutParams at android.support.v7.widget.RecyclerView.getChildViewHolderInt(RecyclerView.java:3661) at android.support.v7.widget.RecyclerView.removeAnimatingView(RecyclerView.java:1125) at android.support.v7.widget.RecyclerView.access$6400(RecyclerView.java:147) at android.support.v7.widget.RecyclerView$ItemAnimatorRestoreListener.onAnimationFinished(RecyclerView.java:10294) at android.support.v7.widget.RecyclerView$ItemAnimator.dispatchAnimationFinished(RecyclerView.java:10794) at android.support.v7.widget.SimpleItemAnimator.dispatchAddFinished(SimpleItemAnimator.java:289) at android.support.v7.widget.DefaultItemAnimator$5.onAnimationEnd(DefaultItemAnimator.java:241) at android.support.v4.view.ViewPropertyAnimatorCompatJB$1.onAnimationEnd(ViewPropertyAnimatorCompatJB.java:47) at android.view.ViewPropertyAnimator$AnimatorEventListener.onAnimationEnd(ViewPropertyAnimator.java:1114) at android.animation.ValueAnimator.endAnimation(ValueAnimator.java:1239) at android.animation.ValueAnimator$AnimationHandler.doAnimationFrame(ValueAnimator.java:766) at android.animation.ValueAnimator$AnimationHandler$1.run(ValueAnimator.java:801) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858) at android.view.Choreographer.doCallbacks(Choreographer.java:670) at android.view.Choreographer.doFrame(Choreographer.java:603) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:224) at android.app.ActivityThread.main(ActivityThread.java:5514) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

@davideas
Copy link
Owner

Hello @tprochazka, can you be more specific, because you say that you don't add or animate anything, and you just scroll(?), while I think it seems related to the issue 79, when new item and when expandable are used as well.
I encountered this exception during my tests, but only with expandable sections with sticky headers, currently I am not able to resolve it yet.

@davideas davideas changed the title Crahs during animation on 5.0.0 beta 6 [5.0.0-b6] Crash during animation (with sticky headers) May 13, 2016
@davideas davideas added the bug label May 13, 2016
davideas added a commit that referenced this issue May 13, 2016
@mdtuyen
Copy link

mdtuyen commented May 16, 2016

I have same issue. After update in StickyHeaderHelper file I only have a log after many time reproduce:
java.lang.NullPointerException: Attempt to read from field 'boolean android.support.v7.widget.RecyclerView$ViewHolder.mInChangeScrap' on a null object reference

ViewHolder in a function return null so that crash.

@gregEstoke
Copy link

gregEstoke commented May 26, 2016

I have the same bug. But one different stack trace:
ANDROID 6.0.1 API 23
HEADERS AND SECTION ACTIVITY:

05-26 10:34:46.279 23658-23658/eu.davidea.examples.flexibleadapter E/AndroidRuntime: FATAL EXCEPTION: main
 Process: eu.davidea.examples.flexibleadapter, PID: 23658
   java.lang.IllegalArgumentException: view is not a child, cannot hide android.widget.RelativeLayout{5a72ad9 V.E...CL. .......D 0,1968-1080,2112}
       at android.support.v7.widget.ChildHelper.unhide(ChildHelper.java:352)
       at android.support.v7.widget.RecyclerView$Recycler.getScrapViewForPosition(RecyclerView.java:5080)
       at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4634)
       at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4617)
       at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1994)
       at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1390)
       at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1353)
       at android.support.v7.widget.LinearLayoutManager.scrollBy(LinearLayoutManager.java:1180)
       at android.support.v7.widget.LinearLayoutManager.scrollVerticallyBy(LinearLayoutManager.java:1031)
       at android.support.v7.widget.RecyclerView$ViewFlinger.run(RecyclerView.java:4061)
       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:873)
       at android.view.Choreographer.doCallbacks(Choreographer.java:676)
       at android.view.Choreographer.doFrame(Choreographer.java:603)
       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:859)
       at android.os.Handler.handleCallback(Handler.java:739)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:168)
       at android.app.ActivityThread.main(ActivityThread.java:5885)
       at java.lang.reflect.Method.invoke(Native Method)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)
INSTAGRAM HEADERS:
     05-26 10:36:15.339 24460-24460/eu.davidea.examples.flexibleadapter E/AndroidRuntime: FATAL EXCEPTION: main
 Process: eu.davidea.examples.flexibleadapter, PID: 24460
 java.lang.ClassCastException: android.widget.FrameLayout$LayoutParams cannot be cast to android.support.v7.widget.RecyclerView$LayoutParams
     at android.support.v7.widget.RecyclerView.getChildViewHolderInt(RecyclerView.java:3661)
     at android.support.v7.widget.RecyclerView$LayoutManager.onInitializeAccessibilityNodeInfoForItem(RecyclerView.java:8317)
     at android.support.v7.widget.RecyclerViewAccessibilityDelegate$1.onInitializeAccessibilityNodeInfo(RecyclerViewAccessibilityDelegate.java:84)
     at android.support.v4.view.AccessibilityDelegateCompat$AccessibilityDelegateJellyBeanImpl$1.onInitializeAccessibilityNodeInfo(AccessibilityDelegateCompat.java:233)
     at android.support.v4.view.AccessibilityDelegateCompatJellyBean$1.onInitializeAccessibilityNodeInfo(AccessibilityDelegateCompatJellyBean.java:61)
     at android.view.View.onInitializeAccessibilityNodeInfo(View.java:6128)
     at android.view.View.createAccessibilityNodeInfoInternal(View.java:6089)
     at android.view.View$AccessibilityDelegate.createAccessibilityNodeInfo(View.java:22441)
     at android.view.View.createAccessibilityNodeInfo(View.java:6072)
     at android.view.AccessibilityInteractionController$AccessibilityNodePrefetcher.prefetchDescendantsOfRealNode(AccessibilityInteractionController.java:1020)
     at android.view.AccessibilityInteractionController$AccessibilityNodePrefetcher.prefetchDescendantsOfRealNode(AccessibilityInteractionController.java:1043)
     at android.view.AccessibilityInteractionController$AccessibilityNodePrefetcher.prefetchDescendantsOfRealNode(AccessibilityInteractionController.java:1043)
     at android.view.AccessibilityInteractionController$AccessibilityNodePrefetcher.prefetchAccessibilityNodeInfos(AccessibilityInteractionController.java:844)
     at android.view.AccessibilityInteractionController.findAccessibilityNodeInfoByAccessibilityIdUiThread(AccessibilityInteractionController.java:156)
     at android.view.AccessibilityInteractionController.access$400(AccessibilityInteractionController.java:54)
     at android.view.AccessibilityInteractionController$PrivateHandler.handleMessage(AccessibilityInteractionController.java:1191)
     at android.os.Handler.dispatchMessage(Handler.java:102)
     at android.os.Looper.loop(Looper.java:168)
     at android.app.ActivityThread.main(ActivityThread.java:5885)
     at java.lang.reflect.Method.invoke(Native Method)
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)

@huteri
Copy link

huteri commented Jun 30, 2016

it's not fixed in beta 7.. here is mine

Fatal Exception: java.lang.ClassCastException: android.widget.FrameLayout$LayoutParams cannot be cast to android.support.v7.widget.RecyclerView$LayoutParams
       at android.support.v7.widget.RecyclerView.getChildViewHolderInt(RecyclerView.java:3411)
       at android.support.v7.widget.RecyclerView$LayoutManager.onInitializeAccessibilityNodeInfoForItem(RecyclerView.java:7643)
       at android.support.v7.widget.RecyclerViewAccessibilityDelegate$1.onInitializeAccessibilityNodeInfo(RecyclerViewAccessibilityDelegate.java:84)
       at android.support.v4.view.AccessibilityDelegateCompat$AccessibilityDelegateJellyBeanImpl$1.onInitializeAccessibilityNodeInfo(AccessibilityDelegateCompat.java:233)
       at android.support.v4.view.AccessibilityDelegateCompatJellyBean$1.onInitializeAccessibilityNodeInfo(AccessibilityDelegateCompatJellyBean.java:61)
       at android.view.View.onInitializeAccessibilityNodeInfo(View.java:5852)
       at android.widget.LinearLayout.onInitializeAccessibilityNodeInfo(LinearLayout.java:1817)
       at android.view.View.createAccessibilityNodeInfoInternal(View.java:5815)
       at android.view.View$AccessibilityDelegate.createAccessibilityNodeInfo(View.java:21405)
       at android.view.View.createAccessibilityNodeInfo(View.java:5800)
       at android.view.AccessibilityInteractionController$AccessibilityNodePrefetcher.prefetchDescendantsOfRealNode(AccessibilityInteractionController.java:975)
       at android.view.AccessibilityInteractionController$AccessibilityNodePrefetcher.prefetchAccessibilityNodeInfos(AccessibilityInteractionController.java:799)
       at android.view.AccessibilityInteractionController.findAccessibilityNodeInfoByAccessibilityIdUiThread(AccessibilityInteractionController.java:155)
       at android.view.AccessibilityInteractionController.access$400(AccessibilityInteractionController.java:53)
       at android.view.AccessibilityInteractionController$PrivateHandler.handleMessage(AccessibilityInteractionController.java:1146)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:135)
       at android.app.ActivityThread.main(ActivityThread.java:5930)
       at java.lang.reflect.Method.invoke(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:372)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)

@huteri
Copy link

huteri commented Jun 30, 2016

hi @davideas, can you confirm on this one?

@davideas
Copy link
Owner

Well, it is fixed.
You have to pass true as parameter of the FlexibleViewHolder Constructor only for header VH.

There was a discussion in the other issue in order to apply a way to receive this new information from the developer, and since I only received 1 feedback I decided to do it that way which I agree.

All this is now well documented. also in the release notes.
I'm sorry if you missed that.
Davide

@huteri
Copy link

huteri commented Jul 4, 2016

@davideas now I am passing true for boolean stickyHeader parameter, but there is an issue with the layout. Please look on the screenshot,
device-2016-07-04-145208

The first child item is covered by its header, there should be 03PM-04PM below the first header, but if we scroll down and scroll up again, it's fine.

device-2016-07-04-145414

Anything I missed?

@davideas
Copy link
Owner

davideas commented Jul 4, 2016

Glad to see it works, but regarding the fact the 1st child element appears below at the opening, I do not know.
Try to disable the sticky and re-enable. Also keep enabled the logs for your test. This behavior doesn't occur in the demo, I can't help too much without checking the code.

Consider that the headers are inserted after the child elements.

@Raed-Mughaus
Copy link

@huteri If you have set your header view height to wrap_content try to change it.

@davideas
Copy link
Owner

davideas commented Jul 4, 2016

Ok, so it the same of issue #121, the fix will be available with next snapshot release.

@huteri
Copy link

huteri commented Jul 5, 2016

Solved, thanks!

@Raed-Mughaus
Copy link

@huteri You're welcome

@tprochazka
Copy link
Author

Great work! Thank you very much, now it not crashing anymore.

@229106948
Copy link

I also have the same issue , it only happen in 8.0 system

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

7 participants