Skip to content

Commit 944ccb4

Browse files
authored
fix(android): Allow pages to be removed (#351)
* fix(android): Allow pages to be removed * chore: Address CR comments
1 parent b0dae29 commit 944ccb4

File tree

1 file changed

+20
-6
lines changed

1 file changed

+20
-6
lines changed

android/src/main/java/com/reactnativepagerview/PagerViewViewManager.kt

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)