java.lang.IllegalArgumentException: parameter must be a descendant of this view

3.3k views Asked by At

I'm getting multiple crashes with this message parameter must be a descendant of this view from various Redmi devices. I have read similar questions on stackoverflow but I couldn't understand their solutions. As these logs don't include the activity or function names, I'm confused about where to start.

My app has lot of activities and fragments. How can I find the component causing this crash?

Device 1 log,

Fatal Exception: java.lang.IllegalArgumentException: parameter must be a descendant of this view
       at android.view.ViewGroup.offsetRectBetweenParentAndChild(ViewGroup.java:6362)
       at android.view.ViewGroup.offsetDescendantRectToMyCoords(ViewGroup.java:6291)
       at android.view.ViewRootImpl.scrollToRectOrFocus(ViewRootImpl.java:4607)
       at android.view.ViewRootImpl.draw(ViewRootImpl.java:4147)
       at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:3989)
       at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3250)
       at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2076)
       at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8506)
       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1076)
       at android.view.Choreographer.doCallbacks(Choreographer.java:897)
       at android.view.Choreographer.doFrame(Choreographer.java:826)
       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1061)
       at android.os.Handler.handleCallback(Handler.java:938)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:236)
       at android.app.ActivityThread.main(ActivityThread.java:8059)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:656)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967)

Device 2 log,

Fatal Exception: java.lang.IllegalArgumentException: parameter must be a descendant of this view
       at android.view.ViewGroup.offsetRectBetweenParentAndChild(ViewGroup.java:6417)
       at android.view.ViewGroup.offsetDescendantRectToMyCoords(ViewGroup.java:6343)
       at android.widget.ScrollView.isWithinDeltaOfScreen(ScrollView.java:1286)
       at android.widget.ScrollView.onSizeChanged(ScrollView.java:1701)
       at android.view.View.sizeChange(View.java:23557)
       at android.view.View.setFrame(View.java:23507)
       at android.view.View.layout(View.java:23356)
       at android.view.ViewGroup.layout(ViewGroup.java:6534)
       at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1103)
       at android.view.View.layout(View.java:23361)
       at android.view.ViewGroup.layout(ViewGroup.java:6534)
       at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
       at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
       at android.view.View.layout(View.java:23361)
       at android.view.ViewGroup.layout(ViewGroup.java:6534)
       at androidx.recyclerview.widget.RecyclerView$LayoutManager.layoutDecoratedWithMargins(RecyclerView.java:9878)
       at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1689)
       at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1591)
       at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:668)
       at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4309)
       at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:4012)
       at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4578)
       at android.view.View.layout(View.java:23361)
       at android.view.ViewGroup.layout(ViewGroup.java:6534)
       at androidx.viewpager2.widget.ViewPager2.onLayout(ViewPager2.java:527)
       at android.view.View.layout(View.java:23361)
       at android.view.ViewGroup.layout(ViewGroup.java:6534)
       at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1103)
       at android.view.View.layout(View.java:23361)
       at android.view.ViewGroup.layout(ViewGroup.java:6534)
       at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
       at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
       at android.view.View.layout(View.java:23361)
       at android.view.ViewGroup.layout(ViewGroup.java:6534)
       at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
       at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
       at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
       at android.view.View.layout(View.java:23361)
       at android.view.ViewGroup.layout(ViewGroup.java:6534)
       at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
       at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
       at android.view.View.layout(View.java:23361)
       at android.view.ViewGroup.layout(ViewGroup.java:6534)
       at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
       at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
       at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
       at android.view.View.layout(View.java:23361)
       at android.view.ViewGroup.layout(ViewGroup.java:6534)
       at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
       at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
       at com.android.internal.policy.DecorView.onLayout(DecorView.java:804)
       at android.view.View.layout(View.java:23361)
       at android.view.ViewGroup.layout(ViewGroup.java:6534)
       at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:3702)
       at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3160)
       at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2129)
       at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8603)
       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:975)
       at android.view.Choreographer.doCallbacks(Choreographer.java:799)
       at android.view.Choreographer.doFrame(Choreographer.java:734)
       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:960)
       at android.os.Handler.handleCallback(Handler.java:938)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:236)
       at android.app.ActivityThread.main(ActivityThread.java:7864)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:620)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1011)

Device 3 log,

Fatal Exception: java.lang.IllegalArgumentException: parameter must be a descendant of this view
       at android.view.ViewGroup.offsetRectBetweenParentAndChild(ViewGroup.java:6208)
       at android.view.ViewGroup.offsetDescendantRectToMyCoords(ViewGroup.java:6137)
       at android.widget.ScrollView.isWithinDeltaOfScreen(ScrollView.java:1288)
       at android.widget.ScrollView.onSizeChanged(ScrollView.java:1703)
       at android.view.View.sizeChange(View.java:22276)
       at android.view.View.setFrame(View.java:22226)
       at android.view.View.layout(View.java:22085)
       at android.view.ViewGroup.layout(ViewGroup.java:6325)
       at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1103)
       at android.view.View.layout(View.java:22088)
       at android.view.ViewGroup.layout(ViewGroup.java:6325)
       at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
       at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
       at android.view.View.layout(View.java:22088)
       at android.view.ViewGroup.layout(ViewGroup.java:6325)
       at androidx.recyclerview.widget.RecyclerView$LayoutManager.layoutDecoratedWithMargins(RecyclerView.java:9878)
       at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1689)
       at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1591)
       at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:668)
       at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4309)
       at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:4012)
       at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4578)
       at android.view.View.layout(View.java:22088)
       at android.view.ViewGroup.layout(ViewGroup.java:6325)
       at androidx.viewpager2.widget.ViewPager2.onLayout(ViewPager2.java:527)
       at android.view.View.layout(View.java:22088)
       at android.view.ViewGroup.layout(ViewGroup.java:6325)
       at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1103)
       at android.view.View.layout(View.java:22088)
       at android.view.ViewGroup.layout(ViewGroup.java:6325)
       at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
       at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
       at android.view.View.layout(View.java:22088)
       at android.view.ViewGroup.layout(ViewGroup.java:6325)
       at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
       at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
       at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
       at android.view.View.layout(View.java:22088)
       at android.view.ViewGroup.layout(ViewGroup.java:6325)
       at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
       at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
       at android.view.View.layout(View.java:22088)
       at android.view.ViewGroup.layout(ViewGroup.java:6325)
       at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
       at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
       at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
       at android.view.View.layout(View.java:22088)
       at android.view.ViewGroup.layout(ViewGroup.java:6325)
       at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
       at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
       at com.android.internal.policy.DecorView.onLayout(DecorView.java:812)
       at android.view.View.layout(View.java:22088)
       at android.view.ViewGroup.layout(ViewGroup.java:6325)
       at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:3191)
       at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2701)
       at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1819)
       at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7781)
       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1031)
       at android.view.Choreographer.doCallbacks(Choreographer.java:854)
       at android.view.Choreographer.doFrame(Choreographer.java:789)
       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1016)
       at android.os.Handler.handleCallback(Handler.java:883)
       at android.os.Handler.dispatchMessage(Handler.java:100)
       at android.os.Looper.loop(Looper.java:224)
       at android.app.ActivityThread.main(ActivityThread.java:7590)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)

Device 4 log,

Fatal Exception: java.lang.IllegalArgumentException: parameter must be a descendant of this view
       at android.view.ViewGroup.offsetRectBetweenParentAndChild(ViewGroup.java:6415)
       at android.view.ViewGroup.offsetDescendantRectToMyCoords(ViewGroup.java:6341)
       at android.widget.ScrollView.isWithinDeltaOfScreen(ScrollView.java:1286)
       at android.widget.ScrollView.onSizeChanged(ScrollView.java:1701)
       at android.view.View.sizeChange(View.java:23462)
       at android.view.View.setFrame(View.java:23412)
       at android.view.View.layout(View.java:23261)
       at android.view.ViewGroup.layout(ViewGroup.java:6532)
       at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1103)
       at android.view.View.layout(View.java:23266)
       at android.view.ViewGroup.layout(ViewGroup.java:6532)
       at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
       at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
       at android.view.View.layout(View.java:23266)
       at android.view.ViewGroup.layout(ViewGroup.java:6532)
       at androidx.recyclerview.widget.RecyclerView$LayoutManager.layoutDecoratedWithMargins(RecyclerView.java:9878)
       at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1689)
       at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1591)
       at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:668)
       at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4309)
       at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:4012)
       at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4578)
       at android.view.View.layout(View.java:23266)
       at android.view.ViewGroup.layout(ViewGroup.java:6532)
       at androidx.viewpager2.widget.ViewPager2.onLayout(ViewPager2.java:527)
       at android.view.View.layout(View.java:23266)
       at android.view.ViewGroup.layout(ViewGroup.java:6532)
       at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1103)
       at android.view.View.layout(View.java:23266)
       at android.view.ViewGroup.layout(ViewGroup.java:6532)
       at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
       at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
       at android.view.View.layout(View.java:23266)
       at android.view.ViewGroup.layout(ViewGroup.java:6532)
       at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
       at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
       at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
       at android.view.View.layout(View.java:23266)
       at android.view.ViewGroup.layout(ViewGroup.java:6532)
       at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
       at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
       at android.view.View.layout(View.java:23266)
       at android.view.ViewGroup.layout(ViewGroup.java:6532)
       at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
       at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
       at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
       at android.view.View.layout(View.java:23266)
       at android.view.ViewGroup.layout(ViewGroup.java:6532)
       at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
       at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
       at com.android.internal.policy.DecorView.onLayout(DecorView.java:804)
       at android.view.View.layout(View.java:23266)
       at android.view.ViewGroup.layout(ViewGroup.java:6532)
       at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:3708)
       at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3166)
       at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2135)
       at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8624)
       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:975)
       at android.view.Choreographer.doCallbacks(Choreographer.java:799)
       at android.view.Choreographer.doFrame(Choreographer.java:734)
       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:960)
       at android.os.Handler.handleCallback(Handler.java:938)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:236)
       at android.app.ActivityThread.main(ActivityThread.java:8057)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:620)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1011)

Device 5 log,

Fatal Exception: java.lang.IllegalArgumentException: parameter must be a descendant of this view
       at android.view.ViewGroup.offsetRectBetweenParentAndChild(ViewGroup.java:6365)
       at android.view.ViewGroup.offsetDescendantRectToMyCoords(ViewGroup.java:6290)
       at android.widget.ScrollView.isWithinDeltaOfScreen(ScrollView.java:1315)
       at android.widget.ScrollView.onSizeChanged(ScrollView.java:1730)
       at android.view.View.sizeChange(View.java:23499)
       at android.view.View.setFrame(View.java:23451)
       at android.view.View.layout(View.java:23300)
       at android.view.ViewGroup.layout(ViewGroup.java:6482)
       at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1103)
       at android.view.View.layout(View.java:23305)
       at android.view.ViewGroup.layout(ViewGroup.java:6482)
       at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
       at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
       at android.view.View.layout(View.java:23305)
       at android.view.ViewGroup.layout(ViewGroup.java:6482)
       at androidx.recyclerview.widget.RecyclerView$LayoutManager.layoutDecoratedWithMargins(RecyclerView.java:9878)
       at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1689)
       at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1591)
       at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:668)
       at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4309)
       at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:4012)
       at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4578)
       at android.view.View.layout(View.java:23305)
       at android.view.ViewGroup.layout(ViewGroup.java:6482)
       at androidx.viewpager2.widget.ViewPager2.onLayout(ViewPager2.java:527)
       at android.view.View.layout(View.java:23305)
       at android.view.ViewGroup.layout(ViewGroup.java:6482)
       at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1103)
       at android.view.View.layout(View.java:23305)
       at android.view.ViewGroup.layout(ViewGroup.java:6482)
       at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
       at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
       at android.view.View.layout(View.java:23305)
       at android.view.ViewGroup.layout(ViewGroup.java:6482)
       at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
       at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
       at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
       at android.view.View.layout(View.java:23305)
       at android.view.ViewGroup.layout(ViewGroup.java:6482)
       at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
       at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
       at android.view.View.layout(View.java:23305)
       at android.view.ViewGroup.layout(ViewGroup.java:6482)
       at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
       at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
       at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
       at android.view.View.layout(View.java:23305)
       at android.view.ViewGroup.layout(ViewGroup.java:6482)
       at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
       at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
       at com.android.internal.policy.DecorView.onLayout(DecorView.java:829)
       at android.view.View.layout(View.java:23305)
       at android.view.ViewGroup.layout(ViewGroup.java:6482)
       at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:3866)
       at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3298)
       at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2235)
       at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9028)
       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1105)
       at android.view.Choreographer.doCallbacks(Choreographer.java:896)
       at android.view.Choreographer.doFrame(Choreographer.java:815)
       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1090)
       at android.os.Handler.handleCallback(Handler.java:938)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loopOnce(Looper.java:223)
       at android.os.Looper.loop(Looper.java:317)
       at android.app.ActivityThread.main(ActivityThread.java:7942)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:568)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1045)

I'm not able to reproduce this crash. Any thoughts?

2

There are 2 answers

5
Cheticamp On

The error is being thrown by the following code in ViewGroup.java. See here.

/**
 * Helper method that offsets a rect either from parent to descendant or
 * descendant to parent.
 */
void offsetRectBetweenParentAndChild(View descendant, Rect rect,
        boolean offsetFromChildToParent, boolean clipToBounds) {

...

    // now that we are up to this view, need to offset one more time
    // to get into our coordinate space
    if (theParent == this) {
        if (offsetFromChildToParent) {
            rect.offset(descendant.mLeft - descendant.mScrollX,
                    descendant.mTop - descendant.mScrollY);
        } else {
            rect.offset(descendant.mScrollX - descendant.mLeft,
                    descendant.mScrollY - descendant.mTop);
        }
    } else {
        throw new IllegalArgumentException("parameter must be a descendant of this view");
    }
}
...

From another question related to the same error message, it looks like there was an attempt to add a view to two ViewGroups. The "parameter" in the message is the "descendant" View and "this view" is the ViewGroup.

I will guess that you are doing something similar, although there is not enough information to immediately identify the source of the problem. A view can only have one parent.

2
Kamran Khan On

replaced All Your

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
</ScrollView>

To

<androidx.core.widget.NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
</androidx.core.widget.NestedScrollView>

I Replace in my project and all issues are resolve now