Fixed
Status Update
Comments
jg...@google.com <jg...@google.com> #2
Project: platform/frameworks/support
Branch: androidx-master-dev
commit b90079595f33f58fece04026a97faa0d243acdb1
Author: Yuichi Araki <yaraki@google.com>
Date: Wed Sep 18 16:55:49 2019
Change the way to detect mismatch between POJO and query
This fixes cursor mismatch warnings with expandProjection.
Bug: 140759491
Test: QueryMethodProcessorTest
Change-Id: I7659002e5e0d1ef60fc1af2a625c0c36da0664d8
M room/compiler/src/main/kotlin/androidx/room/processor/QueryMethodProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt
M room/compiler/src/main/kotlin/androidx/room/solver/query/result/PojoRowAdapter.kt
M room/compiler/src/test/kotlin/androidx/room/processor/QueryMethodProcessorTest.kt
M room/compiler/src/test/kotlin/androidx/room/testing/TestProcessor.kt
https://android-review.googlesource.com/1123258
https://goto.google.com/android-sha1/b90079595f33f58fece04026a97faa0d243acdb1
Branch: androidx-master-dev
commit b90079595f33f58fece04026a97faa0d243acdb1
Author: Yuichi Araki <yaraki@google.com>
Date: Wed Sep 18 16:55:49 2019
Change the way to detect mismatch between POJO and query
This fixes cursor mismatch warnings with expandProjection.
Bug: 140759491
Test: QueryMethodProcessorTest
Change-Id: I7659002e5e0d1ef60fc1af2a625c0c36da0664d8
M room/compiler/src/main/kotlin/androidx/room/processor/QueryMethodProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt
M room/compiler/src/main/kotlin/androidx/room/solver/query/result/PojoRowAdapter.kt
M room/compiler/src/test/kotlin/androidx/room/processor/QueryMethodProcessorTest.kt
M room/compiler/src/test/kotlin/androidx/room/testing/TestProcessor.kt
h6...@gmail.com <h6...@gmail.com> #3
h6...@gmail.com <h6...@gmail.com> #4
Project: platform/frameworks/support
Branch: androidx-master-dev
commit bdde5a1a970ddc9007b28de4aa29d60ffa588f08
Author: Yigit Boyar <yboyar@google.com>
Date: Thu Apr 16 16:47:05 2020
Re-factor how errors are dismissed when query is re-written
This CL changes how we handle errors/warnings if query is
re-written.
There was a bug in expandProjection where we would report warnings
for things that Room already fixes automatically ( b/140759491 ).
The solution to that problem (I7659002e5e0d1ef60fc1af2a625c0c36da0664d8)
solved it by deferring validating of columns until after re-write
decision is made. Unfortunately, this required changing PojoRowAdapter
to have a dummy mapping until it is validating, make it hard to use
as it does have a non-null mapping which is not useful.
This CL partially reverts that change and instead rely on the log
deferring logic we have in Context. This way, we don't need to break
the stability of PojoRowAdapter while still having the ability to
drop warnings that room fixes. This will also play nicer when we
have different query re-writing options that can use more information
about the query results.
Bug: 153387066
Bug: 140759491
Test: existing tests pass
Change-Id: I2ec967c763d33d7a3ff02c1a13c6953b460d1e5f
M room/compiler/src/main/kotlin/androidx/room/log/RLog.kt
M room/compiler/src/main/kotlin/androidx/room/processor/QueryMethodProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt
M room/compiler/src/main/kotlin/androidx/room/solver/query/result/PojoRowAdapter.kt
https://android-review.googlesource.com/1288456
Branch: androidx-master-dev
commit bdde5a1a970ddc9007b28de4aa29d60ffa588f08
Author: Yigit Boyar <yboyar@google.com>
Date: Thu Apr 16 16:47:05 2020
Re-factor how errors are dismissed when query is re-written
This CL changes how we handle errors/warnings if query is
re-written.
There was a bug in expandProjection where we would report warnings
for things that Room already fixes automatically (
The solution to that problem (I7659002e5e0d1ef60fc1af2a625c0c36da0664d8)
solved it by deferring validating of columns until after re-write
decision is made. Unfortunately, this required changing PojoRowAdapter
to have a dummy mapping until it is validating, make it hard to use
as it does have a non-null mapping which is not useful.
This CL partially reverts that change and instead rely on the log
deferring logic we have in Context. This way, we don't need to break
the stability of PojoRowAdapter while still having the ability to
drop warnings that room fixes. This will also play nicer when we
have different query re-writing options that can use more information
about the query results.
Bug: 153387066
Bug: 140759491
Test: existing tests pass
Change-Id: I2ec967c763d33d7a3ff02c1a13c6953b460d1e5f
M room/compiler/src/main/kotlin/androidx/room/log/RLog.kt
M room/compiler/src/main/kotlin/androidx/room/processor/QueryMethodProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt
M room/compiler/src/main/kotlin/androidx/room/solver/query/result/PojoRowAdapter.kt
h6...@gmail.com <h6...@gmail.com> #5
Hi! I have successfully created a demo project which can reproduce this issue. Please check the following repo and I hope it helps to resolve the issue.
https://github.com/h6ah4i/FragmentStateAdapterOnFailedToRecyclerViewFailure
h6...@gmail.com <h6...@gmail.com> #6
[UPDATE]
This issue still exists on ViewPager2 v1.0.0-alpha06 with RecyclerView v1.1.0-beta01.
This issue still exists on ViewPager2 v1.0.0-alpha06 with RecyclerView v1.1.0-beta01.
jg...@google.com <jg...@google.com> #7
I can confirm I can repro this and will try to provide a workaround / fix soon.
Big thanks for the sample app, repro steps and research info. Super appreciated!
Big thanks for the sample app, repro steps and research info. Super appreciated!
jg...@google.com <jg...@google.com> #8
The easiest workaround would involve copying FragmentStateAdapter and FragmentViewHolder into your project, and in FragmentStateAdapter adding ensureFragment(holder.getAdapterPosition()) as the first line of placeFragmentInViewHolder method. Attached as a patch to your sample app.
We'll work on a proper fix. Might unblock you in the meantime though. Thanks again for reporting and a sample app.
We'll work on a proper fix. Might unblock you in the meantime though. Thanks again for reporting and a sample app.
jg...@google.com <jg...@google.com>
ap...@google.com <ap...@google.com> #9
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 07cadad5116ff71ab161a8ef3433679d89530405
Author: Jakub Gielzak <jgielzak@google.com>
Date: Mon Jul 29 15:17:08 2019
Fix for FragmentStateAdapter transient state issue
Fixes a crash when a ViewHolder which has gone through
onFailedToRecycleView is shown again violating Adapter's design
assumptions.
Bug: 134246546
Test: TransientStateFragmentTest
Test: ./gradlew viewpager2:connectedCheck
Change-Id: Ieb166c6fb48907cbb7aa46ab87a3ae4cc29591a6
A viewpager2/src/androidTest/java/androidx/viewpager2/widget/TransientStateFragmentTest.kt
M viewpager2/src/main/java/androidx/viewpager2/adapter/FragmentStateAdapter.java
https://android-review.googlesource.com/1092796
https://goto.google.com/android-sha1/07cadad5116ff71ab161a8ef3433679d89530405
Branch: androidx-master-dev
commit 07cadad5116ff71ab161a8ef3433679d89530405
Author: Jakub Gielzak <jgielzak@google.com>
Date: Mon Jul 29 15:17:08 2019
Fix for FragmentStateAdapter transient state issue
Fixes a crash when a ViewHolder which has gone through
onFailedToRecycleView is shown again violating Adapter's design
assumptions.
Bug: 134246546
Test: TransientStateFragmentTest
Test: ./gradlew viewpager2:connectedCheck
Change-Id: Ieb166c6fb48907cbb7aa46ab87a3ae4cc29591a6
A viewpager2/src/androidTest/java/androidx/viewpager2/widget/TransientStateFragmentTest.kt
M viewpager2/src/main/java/androidx/viewpager2/adapter/FragmentStateAdapter.java
ap...@google.com <ap...@google.com> #10
Project: platform/frameworks/support
Branch: androidx-master-dev
commit a35a5180df0b98c4af4a4e119388f7d70d27ade4
Author: Jakub Gielzak <jgielzak@google.com>
Date: Tue Jul 30 17:27:14 2019
FragmentStateAdapter transient state fix follow-up
Follow-up to Ieb166c6fb48907cbb7aa46ab87a3ae4cc29591a6:
* Disabled tests on API < 16
* Updated a comment
Bug: 134246546
Test: TransientStateFragmentTest
Test: ./gradlew viewpager2:connectedCheck
Change-Id: Id27c1267d4fc75c41849291322952fc1ea0e8d0d
M viewpager2/src/androidTest/java/androidx/viewpager2/widget/TransientStateFragmentTest.kt
M viewpager2/src/main/java/androidx/viewpager2/adapter/FragmentStateAdapter.java
https://android-review.googlesource.com/1093437
https://goto.google.com/android-sha1/a35a5180df0b98c4af4a4e119388f7d70d27ade4
Branch: androidx-master-dev
commit a35a5180df0b98c4af4a4e119388f7d70d27ade4
Author: Jakub Gielzak <jgielzak@google.com>
Date: Tue Jul 30 17:27:14 2019
FragmentStateAdapter transient state fix follow-up
Follow-up to Ieb166c6fb48907cbb7aa46ab87a3ae4cc29591a6:
* Disabled tests on API < 16
* Updated a comment
Bug: 134246546
Test: TransientStateFragmentTest
Test: ./gradlew viewpager2:connectedCheck
Change-Id: Id27c1267d4fc75c41849291322952fc1ea0e8d0d
M viewpager2/src/androidTest/java/androidx/viewpager2/widget/TransientStateFragmentTest.kt
M viewpager2/src/main/java/androidx/viewpager2/adapter/FragmentStateAdapter.java
jg...@google.com <jg...@google.com> #11
The fix is now in place and should come out in the next release.
wa...@gmail.com <wa...@gmail.com> #13
I can't reproduce this myself but I get this issue in production on Xiaomi running Android 10 with ViewPager2 1.0.0 stable release. Any idea what could cause it now?
jg...@google.com <jg...@google.com> #14
Hi, could you share the stack trace?
wa...@gmail.com <wa...@gmail.com> #15
[Deleted User] <[Deleted User]> #16
I am facing this issue in 1.0.0 release
Fatal Exception: java.lang.IllegalStateException
Design assumption violated.
androidx.viewpager2.adapter.FragmentStateAdapter.placeFragmentInViewHolder + 287 (FragmentStateAdapter.java:287)
androidx.viewpager2.adapter.FragmentStateAdapter$1.onLayoutChange + 190 (FragmentStateAdapter.java:190)
android.view.View.layout + 21131 (View.java:21131)
android.view.ViewGroup.layout + 6400 (ViewGroup.java:6400)
androidx.recyclerview.widget.RecyclerView$LayoutManager.layoutDecoratedWithMargins + 9587 (RecyclerView.java:9587)
androidx.recyclerview.widget.LinearLayoutManager.layoutChunk + 1685 (LinearLayoutManager.java:1685)
androidx.recyclerview.widget.LinearLayoutManager.fill + 1587 (LinearLayoutManager.java:1587)
androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren + 665 (LinearLayoutManager.java:665)
androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2 + 4134 (RecyclerView.java:4134)
androidx.recyclerview.widget.RecyclerView.dispatchLayout + 3851 (RecyclerView.java:3851)
androidx.recyclerview.widget.RecyclerView.onLayout + 4404 (RecyclerView.java:4404)
android.view.View.layout + 21112 (View.java:21112)
android.view.ViewGroup.layout + 6400 (ViewGroup.java:6400)
androidx.viewpager2.widget.ViewPager2.onLayout + 527 (ViewPager2.java:527)
android.view.View.layout + 21112 (View.java:21112)
android.view.ViewGroup.layout + 6400 (ViewGroup.java:6400)
androidx.constraintlayout.widget.ConstraintLayout.onLayout + 1915 (ConstraintLayout.java:1915)
android.view.View.layout + 21112 (View.java:21112)
android.view.ViewGroup.layout + 6400 (ViewGroup.java:6400)
android.widget.FrameLayout.layoutChildren + 323 (FrameLayout.java:323)
android.widget.FrameLayout.onLayout + 261 (FrameLayout.java:261)
android.view.View.layout + 21112 (View.java:21112)
android.view.ViewGroup.layout + 6400 (ViewGroup.java:6400)
android.widget.LinearLayout.setChildFrame + 1828 (LinearLayout.java:1828)
android.widget.LinearLayout.layoutVertical + 1656 (LinearLayout.java:1656)
android.widget.LinearLayout.onLayout + 1565 (LinearLayout.java:1565)
android.view.View.layout + 21112 (View.java:21112)
android.view.ViewGroup.layout + 6400 (ViewGroup.java:6400)
android.widget.FrameLayout.layoutChildren + 323 (FrameLayout.java:323)
android.widget.FrameLayout.onLayout + 261 (FrameLayout.java:261)
android.view.View.layout + 21112 (View.java:21112)
android.view.ViewGroup.layout + 6400 (ViewGroup.java:6400)
android.widget.LinearLayout.setChildFrame + 1828 (LinearLayout.java:1828)
android.widget.LinearLayout.layoutVertical + 1656 (LinearLayout.java:1656)
android.widget.LinearLayout.onLayout + 1565 (LinearLayout.java:1565)
android.view.View.layout + 21112 (View.java:21112)
android.view.ViewGroup.layout + 6400 (ViewGroup.java:6400)
android.widget.FrameLayout.layoutChildren + 323 (FrameLayout.java:323)
android.widget.FrameLayout.onLayout + 261 (FrameLayout.java:261)
com.android.internal.policy.DecorView.onLayout + 883 (DecorView.java:883)
android.view.View.layout + 21112 (View.java:21112)
android.view.ViewGroup.layout + 6400 (ViewGroup.java:6400)
android.view.ViewRootImpl.performLayout + 3368 (ViewRootImpl.java:3368)
android.view.ViewRootImpl.performTraversals + 2809 (ViewRootImpl.java:2809)
android.view.ViewRootImpl.doTraversal + 1815 (ViewRootImpl.java:1815)
android.view.ViewRootImpl$TraversalRunnable.run + 8228 (ViewRootImpl.java:8228)
android.view.Choreographer$CallbackRecord.run + 995 (Choreographer.java:995)
android.view.Choreographer.doCallbacks + 807 (Choreographer.java:807)
android.view.Choreographer.doFrame + 739 (Choreographer.java:739)
android.view.Choreographer$FrameDisplayEventReceiver.run + 981 (Choreographer.java:981)
android.os.Handler.handleCallback + 873 (Handler.java:873)
android.os.Handler.dispatchMessage + 99 (Handler.java:99)
android.os.Looper.loop + 226 (Looper.java:226)
android.app.ActivityThread.main + 7212 (ActivityThread.java:7212)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run + 576 (RuntimeInit.java:576)
com.android.internal.os.ZygoteInit.main + 956 (ZygoteInit.java:956)
Fatal Exception: java.lang.IllegalStateException
Design assumption violated.
androidx.viewpager2.adapter.FragmentStateAdapter.placeFragmentInViewHolder + 287 (FragmentStateAdapter.java:287)
androidx.viewpager2.adapter.FragmentStateAdapter$1.onLayoutChange + 190 (FragmentStateAdapter.java:190)
android.view.View.layout + 21131 (View.java:21131)
android.view.ViewGroup.layout + 6400 (ViewGroup.java:6400)
androidx.recyclerview.widget.RecyclerView$LayoutManager.layoutDecoratedWithMargins + 9587 (RecyclerView.java:9587)
androidx.recyclerview.widget.LinearLayoutManager.layoutChunk + 1685 (LinearLayoutManager.java:1685)
androidx.recyclerview.widget.LinearLayoutManager.fill + 1587 (LinearLayoutManager.java:1587)
androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren + 665 (LinearLayoutManager.java:665)
androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2 + 4134 (RecyclerView.java:4134)
androidx.recyclerview.widget.RecyclerView.dispatchLayout + 3851 (RecyclerView.java:3851)
androidx.recyclerview.widget.RecyclerView.onLayout + 4404 (RecyclerView.java:4404)
android.view.View.layout + 21112 (View.java:21112)
android.view.ViewGroup.layout + 6400 (ViewGroup.java:6400)
androidx.viewpager2.widget.ViewPager2.onLayout + 527 (ViewPager2.java:527)
android.view.View.layout + 21112 (View.java:21112)
android.view.ViewGroup.layout + 6400 (ViewGroup.java:6400)
androidx.constraintlayout.widget.ConstraintLayout.onLayout + 1915 (ConstraintLayout.java:1915)
android.view.View.layout + 21112 (View.java:21112)
android.view.ViewGroup.layout + 6400 (ViewGroup.java:6400)
android.widget.FrameLayout.layoutChildren + 323 (FrameLayout.java:323)
android.widget.FrameLayout.onLayout + 261 (FrameLayout.java:261)
android.view.View.layout + 21112 (View.java:21112)
android.view.ViewGroup.layout + 6400 (ViewGroup.java:6400)
android.widget.LinearLayout.setChildFrame + 1828 (LinearLayout.java:1828)
android.widget.LinearLayout.layoutVertical + 1656 (LinearLayout.java:1656)
android.widget.LinearLayout.onLayout + 1565 (LinearLayout.java:1565)
android.view.View.layout + 21112 (View.java:21112)
android.view.ViewGroup.layout + 6400 (ViewGroup.java:6400)
android.widget.FrameLayout.layoutChildren + 323 (FrameLayout.java:323)
android.widget.FrameLayout.onLayout + 261 (FrameLayout.java:261)
android.view.View.layout + 21112 (View.java:21112)
android.view.ViewGroup.layout + 6400 (ViewGroup.java:6400)
android.widget.LinearLayout.setChildFrame + 1828 (LinearLayout.java:1828)
android.widget.LinearLayout.layoutVertical + 1656 (LinearLayout.java:1656)
android.widget.LinearLayout.onLayout + 1565 (LinearLayout.java:1565)
android.view.View.layout + 21112 (View.java:21112)
android.view.ViewGroup.layout + 6400 (ViewGroup.java:6400)
android.widget.FrameLayout.layoutChildren + 323 (FrameLayout.java:323)
android.widget.FrameLayout.onLayout + 261 (FrameLayout.java:261)
com.android.internal.policy.DecorView.onLayout + 883 (DecorView.java:883)
android.view.View.layout + 21112 (View.java:21112)
android.view.ViewGroup.layout + 6400 (ViewGroup.java:6400)
android.view.ViewRootImpl.performLayout + 3368 (ViewRootImpl.java:3368)
android.view.ViewRootImpl.performTraversals + 2809 (ViewRootImpl.java:2809)
android.view.ViewRootImpl.doTraversal + 1815 (ViewRootImpl.java:1815)
android.view.ViewRootImpl$TraversalRunnable.run + 8228 (ViewRootImpl.java:8228)
android.view.Choreographer$CallbackRecord.run + 995 (Choreographer.java:995)
android.view.Choreographer.doCallbacks + 807 (Choreographer.java:807)
android.view.Choreographer.doFrame + 739 (Choreographer.java:739)
android.view.Choreographer$FrameDisplayEventReceiver.run + 981 (Choreographer.java:981)
android.os.Handler.handleCallback + 873 (Handler.java:873)
android.os.Handler.dispatchMessage + 99 (Handler.java:99)
android.os.Looper.loop + 226 (Looper.java:226)
android.app.ActivityThread.main + 7212 (ActivityThread.java:7212)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run + 576 (RuntimeInit.java:576)
com.android.internal.os.ZygoteInit.main + 956 (ZygoteInit.java:956)
jg...@google.com <jg...@google.com> #17
Re
ye...@tokopedia.com <ye...@tokopedia.com> #18
I also facing this issue in 1.0.0 release
ye...@tokopedia.com <ye...@tokopedia.com> #19
ch...@caravan.gg <ch...@caravan.gg> #20
Occurred in 1.0.0
java.lang.IllegalStateException: Design assumption violated.
at androidx.viewpager2.adapter.FragmentStateAdapter.placeFragmentInViewHolder(FragmentStateAdapter.java:287)
at androidx.viewpager2.adapter.FragmentStateAdapter.onViewAttachedToWindow(FragmentStateAdapter.java:276)
at androidx.viewpager2.adapter.FragmentStateAdapter.onViewAttachedToWindow(FragmentStateAdapter.java:67)
at androidx.recyclerview.widget.RecyclerView.dispatchChildAttached(RecyclerView.java:7556)
at androidx.recyclerview.widget.RecyclerView$5.addView(RecyclerView.java:860)
at androidx.recyclerview.widget.ChildHelper.addView(ChildHelper.java:107)
at androidx.recyclerview.widget.RecyclerView$LayoutManager.addViewInt(RecyclerView.java:8601)
at androidx.recyclerview.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:8559)
at androidx.recyclerview.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:8547)
at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1641)
at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1587)
at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:665)
at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4134)
at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3851)
at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4404)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at androidx.viewpager2.widget.ViewPager2.onLayout(ViewPager2.java:527)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at com.google.android.material.appbar.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:148)
at com.google.android.material.appbar.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:43)
at com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1892)
at androidx.coordinatorlayout.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:918)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at androidx.constraintlayout.widget.ConstraintLayout.onLayout(ConstraintLayout.java:1915)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at androidx.drawerlayout.widget.DrawerLayout.onLayout(DrawerLayout.java:1231)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:
java.lang.IllegalStateException: Design assumption violated.
at androidx.viewpager2.adapter.FragmentStateAdapter.placeFragmentInViewHolder(FragmentStateAdapter.java:287)
at androidx.viewpager2.adapter.FragmentStateAdapter.onViewAttachedToWindow(FragmentStateAdapter.java:276)
at androidx.viewpager2.adapter.FragmentStateAdapter.onViewAttachedToWindow(FragmentStateAdapter.java:67)
at androidx.recyclerview.widget.RecyclerView.dispatchChildAttached(RecyclerView.java:7556)
at androidx.recyclerview.widget.RecyclerView$5.addView(RecyclerView.java:860)
at androidx.recyclerview.widget.ChildHelper.addView(ChildHelper.java:107)
at androidx.recyclerview.widget.RecyclerView$LayoutManager.addViewInt(RecyclerView.java:8601)
at androidx.recyclerview.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:8559)
at androidx.recyclerview.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:8547)
at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1641)
at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1587)
at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:665)
at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4134)
at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3851)
at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4404)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at androidx.viewpager2.widget.ViewPager2.onLayout(ViewPager2.java:527)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at com.google.android.material.appbar.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:148)
at com.google.android.material.appbar.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:43)
at com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1892)
at androidx.coordinatorlayout.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:918)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at androidx.constraintlayout.widget.ConstraintLayout.onLayout(ConstraintLayout.java:1915)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at androidx.drawerlayout.widget.DrawerLayout.onLayout(DrawerLayout.java:1231)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:
b4...@gmail.com <b4...@gmail.com> #21
version 1.0.0-beta03
java.lang.IllegalStateException: Design assumption violated.
at androidx.viewpager2.adapter.FragmentStateAdapter.placeFragmentInViewHolder(FragmentStateAdapter.java:287)
at androidx.viewpager2.adapter.FragmentStateAdapter.onViewAttachedToWindow(FragmentStateAdapter.java:276)
at androidx.viewpager2.adapter.FragmentStateAdapter.onViewAttachedToWindow(FragmentStateAdapter.java:67)
at androidx.recyclerview.widget.RecyclerView.dispatchChildAttached(RecyclerView.java:7867)
at androidx.recyclerview.widget.RecyclerView$5.addView(RecyclerView.java:893)
at androidx.recyclerview.widget.ChildHelper.addView(ChildHelper.java:107)
at androidx.recyclerview.widget.RecyclerView$LayoutManager.addViewInt(RecyclerView.java:8902)
at androidx.recyclerview.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:8860)
at androidx.recyclerview.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:8848)
at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1645)
at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1591)
at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:668)
at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep1(RecyclerView.java:4255)
at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:4010)
at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4578)
at android.view.View.layout(View.java:23219)
at android.view.ViewGroup.layout(ViewGroup.java:6532)
at androidx.viewpager2.widget.ViewPager2.onLayout(ViewPager2.java:527)
at android.view.View.layout(View.java:23219)
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:23219)
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:23219)
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:23219)
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:23219)
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:23219)
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:23219)
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:23219)
at android.view.ViewGroup.layout(ViewGroup.java:6532)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:3686)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3144)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2115)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8582)
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(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:620)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1011)
java.lang.IllegalStateException: Design assumption violated.
at androidx.viewpager2.adapter.FragmentStateAdapter.placeFragmentInViewHolder(FragmentStateAdapter.java:287)
at androidx.viewpager2.adapter.FragmentStateAdapter.onViewAttachedToWindow(FragmentStateAdapter.java:276)
at androidx.viewpager2.adapter.FragmentStateAdapter.onViewAttachedToWindow(FragmentStateAdapter.java:67)
at androidx.recyclerview.widget.RecyclerView.dispatchChildAttached(RecyclerView.java:7867)
at androidx.recyclerview.widget.RecyclerView$5.addView(RecyclerView.java:893)
at androidx.recyclerview.widget.ChildHelper.addView(ChildHelper.java:107)
at androidx.recyclerview.widget.RecyclerView$LayoutManager.addViewInt(RecyclerView.java:8902)
at androidx.recyclerview.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:8860)
at androidx.recyclerview.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:8848)
at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1645)
at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1591)
at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:668)
at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep1(RecyclerView.java:4255)
at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:4010)
at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4578)
at android.view.View.layout(View.java:23219)
at android.view.ViewGroup.layout(ViewGroup.java:6532)
at androidx.viewpager2.widget.ViewPager2.onLayout(ViewPager2.java:527)
at android.view.View.layout(View.java:23219)
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:23219)
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:23219)
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:23219)
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:23219)
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:23219)
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:23219)
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:23219)
at android.view.ViewGroup.layout(ViewGroup.java:6532)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:3686)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3144)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2115)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8582)
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(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:620)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1011)
ly...@gmail.com <ly...@gmail.com> #22
The cause is getItemId return the duplicate id.
I find self test stable reproduction.
I find self test stable reproduction.
Description
- androidx.viewpager2:viewpager2:1.0.0-alpha04
I noticed that ViewPager2 sometimes crashes with the following stack trace. Currently, I have not figured out how to reproduce the error frequently, so I will attach the procedure/sample project for reproduction later.
```
java.lang.IllegalStateException: Design assumption violated.
at androidx.viewpager2.adapter.FixedFragmentStateAdapter.placeFragmentInViewHolder(FixedFragmentStateAdapter.java:234)
at androidx.viewpager2.adapter.FixedFragmentStateAdapter.onViewAttachedToWindow(FixedFragmentStateAdapter.java:223)
at androidx.viewpager2.adapter.FixedFragmentStateAdapter.onViewAttachedToWindow(FixedFragmentStateAdapter.java:61)
at androidx.recyclerview.widget.RecyclerView.dispatchChildAttached(RecyclerView.java:7433)
at androidx.recyclerview.widget.RecyclerView$5.addView(RecyclerView.java:862)
at androidx.recyclerview.widget.ChildHelper.addView(ChildHelper.java:107)
at androidx.recyclerview.widget.RecyclerView$LayoutManager.addViewInt(RecyclerView.java:8478)
at androidx.recyclerview.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:8436)
at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1643)
at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1587)
at androidx.recyclerview.widget.LinearLayoutManager.scrollBy(LinearLayoutManager.java:1391)
at androidx.recyclerview.widget.LinearLayoutManager.scrollHorizontallyBy(LinearLayoutManager.java:1116)
at androidx.recyclerview.widget.RecyclerView.scrollStep(RecyclerView.java:1840)
at androidx.recyclerview.widget.RecyclerView.scrollByInternal(RecyclerView.java:1942)
at androidx.recyclerview.widget.RecyclerView.onTouchEvent(RecyclerView.java:3297)
at androidx.viewpager2.widget.ViewPager2$RecyclerViewImpl.onTouchEvent(ViewPager2.java:797)
at android.view.View.dispatchTouchEvent(View.java:12513)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3024)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2705)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:440)
at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1830)
at android.app.Activity.dispatchTouchEvent(Activity.java:3400)
at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:398)
at android.view.View.dispatchPointerEvent(View.java:12752)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:5106)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4909)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4426)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4479)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4445)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4585)
```