1
1
package com.reactnativepagerview
2
2
3
- import android.util.LayoutDirection
4
3
import android.view.View
5
- import androidx.fragment.app.FragmentActivity
6
4
import androidx.viewpager2.widget.ViewPager2
7
5
import androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback
8
6
import com.facebook.infer.annotation.Assertions
9
7
import com.facebook.react.bridge.ReadableArray
10
8
import com.facebook.react.common.MapBuilder
11
- import com.facebook.react.bridge.LifecycleEventListener
12
9
import com.facebook.react.uimanager.PixelUtil
13
10
import com.facebook.react.uimanager.ThemedReactContext
14
11
import com.facebook.react.uimanager.UIManagerModule
15
12
import com.facebook.react.uimanager.ViewGroupManager
16
13
import com.facebook.react.uimanager.annotations.ReactProp
17
14
import com.facebook.react.uimanager.events.EventDispatcher
18
- import com.reactnativepagerview.Helper.Companion.getReactContext
19
15
import com.reactnativepagerview.event.PageScrollEvent
20
16
import com.reactnativepagerview.event.PageScrollStateChangedEvent
21
17
import com.reactnativepagerview.event.PageSelectedEvent
22
18
23
19
24
20
class PagerViewViewManager : ViewGroupManager <ViewPager2 >() {
25
21
private lateinit var eventDispatcher: EventDispatcher
26
- private lateinit var lifecycleEventListener: LifecycleEventListener
27
-
28
22
29
23
override fun getName (): String {
30
24
return REACT_CLASS
31
25
}
32
26
33
- fun createFragmentAdapter (reactContext : ThemedReactContext ): FragmentAdapter {
34
- return FragmentAdapter ((reactContext.currentActivity as FragmentActivity ? )!! )
35
- }
36
-
37
27
override fun createViewInstance (reactContext : ThemedReactContext ): ViewPager2 {
38
28
val vp = ViewPager2 (reactContext)
39
- if (reactContext.hasCurrentActivity()) {
40
- vp.adapter = createFragmentAdapter(reactContext);
41
- }
42
- lifecycleEventListener = object : LifecycleEventListener {
43
- override fun onHostResume () {
44
- if (vp.adapter == null && reactContext.hasCurrentActivity()) {
45
- vp.adapter = createFragmentAdapter(reactContext)
46
- }
47
- }
48
- override fun onHostPause () {}
49
- override fun onHostDestroy () {}
50
- }
51
- reactContext.addLifecycleEventListener(lifecycleEventListener);
29
+ vp.adapter = ViewPagerAdapter ()
52
30
// https://github.com/callstack/react-native-viewpager/issues/183
53
31
vp.isSaveEnabled = false
54
32
eventDispatcher = reactContext.getNativeModule(UIManagerModule ::class .java)!! .eventDispatcher
@@ -86,21 +64,17 @@ class PagerViewViewManager : ViewGroupManager<ViewPager2>() {
86
64
return vp
87
65
}
88
66
89
- override fun onDropViewInstance (view : ViewPager2 ) {
90
- super .onDropViewInstance(view)
91
- getReactContext(view)?.removeLifecycleEventListener(lifecycleEventListener)
92
- }
93
-
94
67
private fun setCurrentItem (view : ViewPager2 , selectedTab : Int , scrollSmooth : Boolean ) {
95
68
refreshViewChildrenLayout(view)
96
69
view.setCurrentItem(selectedTab, scrollSmooth)
97
70
}
98
71
99
- override fun addView (parent : ViewPager2 , child : View , index : Int ) {
72
+ override fun addView (parent : ViewPager2 , child : View ? , index : Int ) {
100
73
if (child == null ) {
101
74
return
102
75
}
103
- (parent.adapter as FragmentAdapter ? )?.addFragment(child, index)
76
+
77
+ (parent.adapter as ViewPagerAdapter ? )?.addChild(child, index);
104
78
105
79
if (parent.currentItem == index) {
106
80
// Solves https://github.com/callstack/react-native-pager-view/issues/219
@@ -112,15 +86,15 @@ class PagerViewViewManager : ViewGroupManager<ViewPager2>() {
112
86
}
113
87
114
88
override fun getChildCount (parent : ViewPager2 ): Int {
115
- return parent? .adapter?.itemCount ? : 0 ;
89
+ return parent.adapter?.itemCount ? : 0 ;
116
90
}
117
91
118
92
override fun getChildAt (parent : ViewPager2 , index : Int ): View {
119
- return (parent.adapter as FragmentAdapter ? )!! .getChildViewAt (index)
93
+ return (parent.adapter as ViewPagerAdapter ? )!! .getChildAt (index)
120
94
}
121
95
122
96
override fun removeView (parent : ViewPager2 , view : View ) {
123
- (parent.adapter as FragmentAdapter ? )?.removeFragment (view)
97
+ (parent.adapter as ViewPagerAdapter ? )?.removeChild (view)
124
98
125
99
// Required so ViewPager actually animates the removed view right away (otherwise
126
100
// a white screen is shown until the next user interaction).
@@ -130,13 +104,13 @@ class PagerViewViewManager : ViewGroupManager<ViewPager2>() {
130
104
131
105
override fun removeAllViews (parent : ViewPager2 ) {
132
106
parent.isUserInputEnabled = false
133
- val adapter = parent.adapter as FragmentAdapter ?
107
+ val adapter = parent.adapter as ViewPagerAdapter ?
134
108
adapter?.removeAll()
135
109
}
136
110
137
111
override fun removeViewAt (parent : ViewPager2 , index : Int ) {
138
- val adapter = parent.adapter as FragmentAdapter ?
139
- adapter?.removeFragmentAt (index)
112
+ val adapter = parent.adapter as ViewPagerAdapter ?
113
+ adapter?.removeChildAt (index)
140
114
141
115
// Required so ViewPager actually animates the removed view right away (otherwise
142
116
// a white screen is shown until the next user interaction).
0 commit comments