@@ -61,12 +61,7 @@ class PagerViewViewManager : ViewGroupManager<ViewPager2>() {
6161 }
6262
6363 private fun setCurrentItem (view : ViewPager2 , selectedTab : Int , scrollSmooth : Boolean ) {
64- view.post {
65- view.measure(
66- View .MeasureSpec .makeMeasureSpec(view.width, View .MeasureSpec .EXACTLY ),
67- View .MeasureSpec .makeMeasureSpec(view.height, View .MeasureSpec .EXACTLY ))
68- view.layout(view.left, view.top, view.right, view.bottom)
69- }
64+ refreshViewChildrenLayout(view)
7065 view.setCurrentItem(selectedTab, scrollSmooth)
7166 }
7267
@@ -87,6 +82,11 @@ class PagerViewViewManager : ViewGroupManager<ViewPager2>() {
8782
8883 override fun removeView (parent : ViewPager2 , view : View ) {
8984 (parent.adapter as FragmentAdapter ? )!! .removeFragment(view)
85+
86+ // Required so ViewPager actually animates the removed view right away (otherwise
87+ // a white screen is shown until the next user interaction).
88+ // https://github.com/facebook/react-native/issues/17968#issuecomment-697136929
89+ refreshViewChildrenLayout(parent)
9090 }
9191
9292 override fun removeAllViews (parent : ViewPager2 ) {
@@ -98,6 +98,11 @@ class PagerViewViewManager : ViewGroupManager<ViewPager2>() {
9898 override fun removeViewAt (parent : ViewPager2 , index : Int ) {
9999 val adapter = parent.adapter as FragmentAdapter ?
100100 adapter!! .removeFragmentAt(index)
101+
102+ // Required so ViewPager actually animates the removed view right away (otherwise
103+ // a white screen is shown until the next user interaction).
104+ // https://github.com/facebook/react-native/issues/17968#issuecomment-697136929
105+ refreshViewChildrenLayout(parent)
101106 }
102107
103108 override fun needsCustomLayoutForChildren (): Boolean {
@@ -195,6 +200,15 @@ class PagerViewViewManager : ViewGroupManager<ViewPager2>() {
195200 }
196201 }
197202
203+ private fun refreshViewChildrenLayout (view : View ) {
204+ view.post {
205+ view.measure(
206+ View .MeasureSpec .makeMeasureSpec(view.width, View .MeasureSpec .EXACTLY ),
207+ View .MeasureSpec .makeMeasureSpec(view.height, View .MeasureSpec .EXACTLY ))
208+ view.layout(view.left, view.top, view.right, view.bottom)
209+ }
210+ }
211+
198212 companion object {
199213 private const val REACT_CLASS = " RNCViewPager"
200214 private const val COMMAND_SET_PAGE = 1
0 commit comments