@@ -61,12 +61,7 @@ class PagerViewViewManager : ViewGroupManager<ViewPager2>() {
61
61
}
62
62
63
63
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)
70
65
view.setCurrentItem(selectedTab, scrollSmooth)
71
66
}
72
67
@@ -87,6 +82,11 @@ class PagerViewViewManager : ViewGroupManager<ViewPager2>() {
87
82
88
83
override fun removeView (parent : ViewPager2 , view : View ) {
89
84
(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)
90
90
}
91
91
92
92
override fun removeAllViews (parent : ViewPager2 ) {
@@ -98,6 +98,11 @@ class PagerViewViewManager : ViewGroupManager<ViewPager2>() {
98
98
override fun removeViewAt (parent : ViewPager2 , index : Int ) {
99
99
val adapter = parent.adapter as FragmentAdapter ?
100
100
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)
101
106
}
102
107
103
108
override fun needsCustomLayoutForChildren (): Boolean {
@@ -195,6 +200,15 @@ class PagerViewViewManager : ViewGroupManager<ViewPager2>() {
195
200
}
196
201
}
197
202
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
+
198
212
companion object {
199
213
private const val REACT_CLASS = " RNCViewPager"
200
214
private const val COMMAND_SET_PAGE = 1
0 commit comments