google / accompanist

A collection of extension libraries for Jetpack Compose
https://google.github.io/accompanist
Apache License 2.0
7.39k stars 596 forks source link

[Pager] Crash when navigating back to Fragment containing Pager: "No view found for id" #1179

Closed CarsonRedeye closed 2 years ago

CarsonRedeye commented 2 years ago

Description The app crashes if I navigate back to a page that contains a HorizontalPager, where one of the pages hosts a Fragment. I'm using Navigation library.

Steps to reproduce Install this: https://github.com/Chozzle/Reproduce-pager-bug

Navigate, then press the back button.

Expected behavior No crash

Additional context I came across this in my app when I was trying to upgrade from FragmentPagerAdapter using ViewPager. I was hoping to skip ViewPager2 and directly upgrade to compose to avoid multiple migrations.

Using pager version 0.24.9-beta It does not crash if I remove the HorizontalPager. It does not crash if I remove the Fragment page within the HorizontalPager

Stack trace:

FATAL EXCEPTION: main
Process: me.chozzle.reproducebug, PID: 7569
java.lang.IllegalArgumentException: No view found for id 0x7f0800d0 (me.chozzle.reproducebug:id/fragment_container_view) for fragment PagerPageFragment{eed0c47} (59dc5b82-38f3-4a24-b640-9895eb4f6d3d id=0x7f0800d0)
    at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:513)
    at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:261)
    at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:113)
    at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1374)
    at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2841)
    at androidx.fragment.app.FragmentManager.dispatchViewCreated(FragmentManager.java:2777)
    at androidx.fragment.app.Fragment.performViewCreated(Fragment.java:3020)
    at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:551)
    at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:261)
    at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1831)
    at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1764)
    at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1701)
    at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:488)
    at android.os.Handler.handleCallback(Handler.java:938)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loopOnce(Looper.java:201)
    at android.os.Looper.loop(Looper.java:288)
    at android.app.ActivityThread.main(ActivityThread.java:7842)

                                                                                                        at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)                                                                                            
andkulikov commented 2 years ago

Hm, not sure why are saying that it doesn't crash when you remove HorizontalPager. I just tried to just have AndroidViewBinding as a child without HorizontalPager and it is crashing in the same way. Could you please verify it is true for you too, and if yes file it as a general compose bug here https://issuetracker.google.com/issues?q=componentid:612128. Thanks!