Fixed
Status Update
Comments
jg...@google.com <jg...@google.com> #2
> The Transition Kotlin extensions target the Framework Transition class which is a bit confusing
All extensions in 'core-ktx' target either 'core' or the framework types. This is working as expected. It sounds like this is a feature request for a transition-ktx with equivalent extensions for the androidx.transition types.
> as most framework classes are being deprecated in favor of their AndroidX counterparts, Fragments for example.
"Most"? This *dramatically* overstates what is actually happening. Fragments (and loaders) were added to the framework in a time where the Android team did not have external libraries for shipping features. Transition was added 5 years later.
All extensions in 'core-ktx' target either 'core' or the framework types. This is working as expected. It sounds like this is a feature request for a transition-ktx with equivalent extensions for the androidx.transition types.
> as most framework classes are being deprecated in favor of their AndroidX counterparts, Fragments for example.
"Most"? This *dramatically* overstates what is actually happening. Fragments (and loaders) were added to the framework in a time where the Android team did not have external libraries for shipping features. Transition was added 5 years later.
h6...@gmail.com <h6...@gmail.com> #3
Pardon my misunderstanding, I was under the belief that where possible, new features that could be developed outside the framework, would be under Androidx. Also it's a common refrain to use the Androidx libraries over the framework libraries where possible, as those ship update independently of platform releases. I wasn't attempting to be dramatic.
If the Transition api is unlikely to change, there is no need for a transition-ktx for androidx.transition types. If developers should use Androidx transitions over framework transitions where possible however, then it would be much appreciated.
I am well aware of the limitations that existed when Fragments and Loaders were created, and when the Transition api was introduced.
If the Transition api is unlikely to change, there is no need for a transition-ktx for androidx.transition types. If developers should use Androidx transitions over framework transitions where possible however, then it would be much appreciated.
I am well aware of the limitations that existed when Fragments and Loaders were created, and when the Transition api was introduced.
h6...@gmail.com <h6...@gmail.com> #4
Project: platform/frameworks/support
Branch: androidx-master-dev
commit ae42e311ecfbac18cedc90e489d1fdde956a4557
Author: Jake Wharton <jakew@google.com>
Date: Fri Nov 22 11:13:30 2019
Introduce transition-ktx for standalone transition library
These extensions are the same as androidx.core.transition for the platform types, just adapted to the standalone library.
Bug: 138870873
Test: gw :transition:transition-ktx:build :transition:transition-ktx:connectedCheck
Change-Id: Ie80022cc60ed1f482b7593db5ef1ac1c5ea33d8d
M buildSrc/src/main/kotlin/androidx/build/PublishDocsRules.kt
M jetifier/jetifier/migration.config
M settings.gradle
A transition/transition-ktx/OWNERS
A transition/transition-ktx/api/1.4.0-alpha01.txt
A transition/transition-ktx/api/current.txt
A transition/transition-ktx/api/public_plus_experimental_1.4.0-alpha01.txt
A transition/transition-ktx/api/public_plus_experimental_current.txt
A transition/transition-ktx/api/res-1.4.0-alpha01.txt
A transition/transition-ktx/api/restricted_1.4.0-alpha01.txt
A transition/transition-ktx/api/restricted_current.txt
A transition/transition-ktx/build.gradle
A transition/transition-ktx/src/androidTest/AndroidManifest.xml
A transition/transition-ktx/src/androidTest/java/androidx/transition/TestActivity.kt
A transition/transition-ktx/src/androidTest/java/androidx/transition/TransitionTest.kt
A transition/transition-ktx/src/androidTest/res/layout/test_activity.xml
A transition/transition-ktx/src/main/AndroidManifest.xml
A transition/transition-ktx/src/main/java/androidx/transition/Transition.kt
https://android-review.googlesource.com/1172715
Branch: androidx-master-dev
commit ae42e311ecfbac18cedc90e489d1fdde956a4557
Author: Jake Wharton <jakew@google.com>
Date: Fri Nov 22 11:13:30 2019
Introduce transition-ktx for standalone transition library
These extensions are the same as androidx.core.transition for the platform types, just adapted to the standalone library.
Bug: 138870873
Test: gw :transition:transition-ktx:build :transition:transition-ktx:connectedCheck
Change-Id: Ie80022cc60ed1f482b7593db5ef1ac1c5ea33d8d
M buildSrc/src/main/kotlin/androidx/build/PublishDocsRules.kt
M jetifier/jetifier/migration.config
M settings.gradle
A transition/transition-ktx/OWNERS
A transition/transition-ktx/api/1.4.0-alpha01.txt
A transition/transition-ktx/api/current.txt
A transition/transition-ktx/api/public_plus_experimental_1.4.0-alpha01.txt
A transition/transition-ktx/api/public_plus_experimental_current.txt
A transition/transition-ktx/api/res-1.4.0-alpha01.txt
A transition/transition-ktx/api/restricted_1.4.0-alpha01.txt
A transition/transition-ktx/api/restricted_current.txt
A transition/transition-ktx/build.gradle
A transition/transition-ktx/src/androidTest/AndroidManifest.xml
A transition/transition-ktx/src/androidTest/java/androidx/transition/TestActivity.kt
A transition/transition-ktx/src/androidTest/java/androidx/transition/TransitionTest.kt
A transition/transition-ktx/src/androidTest/res/layout/test_activity.xml
A transition/transition-ktx/src/main/AndroidManifest.xml
A transition/transition-ktx/src/main/java/androidx/transition/Transition.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)
```