diff --git a/android/src/main/java/com/swmansion/rnscreens/Screen.kt b/android/src/main/java/com/swmansion/rnscreens/Screen.kt index c99ca362df5baee81fa48d1c9ef09b40a2c23f07..725c07aa0ed516f9dd09f81e522f2d3191d9b5d0 100644 --- a/android/src/main/java/com/swmansion/rnscreens/Screen.kt +++ b/android/src/main/java/com/swmansion/rnscreens/Screen.kt @@ -17,6 +17,7 @@ import androidx.annotation.RequiresApi import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.core.view.children import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.RecyclerView import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import com.facebook.react.bridge.GuardedRunnable import com.facebook.react.bridge.ReactContext @@ -637,7 +638,7 @@ class Screen( endTransitionRecursive(childView.toolbar) } - if (childView is ViewGroup) { + if (childView is ViewGroup && childView !is RecyclerView) { endTransitionRecursive(childView) } } @@ -666,7 +667,10 @@ class Screen( startTransitionRecursive(child.toolbar) } - if (child is ViewGroup) { + // Transition a RecyclerView as one unit. Marking its recyclable children as + // transitioning keeps their parent set after removal, so RecyclerView crashes + // when it tries to recycle them during the screen transition. + if (child is ViewGroup && child !is RecyclerView) { startTransitionRecursive(child) } }