11package com.reactnativepagerview
22
3- import android.util.LayoutDirection
43import android.view.View
5- import androidx.fragment.app.FragmentActivity
64import androidx.viewpager2.widget.ViewPager2
75import androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback
86import com.facebook.infer.annotation.Assertions
97import com.facebook.react.bridge.ReadableArray
108import com.facebook.react.common.MapBuilder
11- import com.facebook.react.bridge.LifecycleEventListener
129import com.facebook.react.uimanager.PixelUtil
1310import com.facebook.react.uimanager.ThemedReactContext
1411import com.facebook.react.uimanager.UIManagerModule
1512import com.facebook.react.uimanager.ViewGroupManager
1613import com.facebook.react.uimanager.annotations.ReactProp
1714import com.facebook.react.uimanager.events.EventDispatcher
18- import com.reactnativepagerview.Helper.Companion.getReactContext
1915import com.reactnativepagerview.event.PageScrollEvent
2016import com.reactnativepagerview.event.PageScrollStateChangedEvent
2117import com.reactnativepagerview.event.PageSelectedEvent
2218
2319
2420class PagerViewViewManager : ViewGroupManager <ViewPager2 >() {
2521 private lateinit var eventDispatcher: EventDispatcher
26- private lateinit var lifecycleEventListener: LifecycleEventListener
27-
2822
2923 override fun getName (): String {
3024 return REACT_CLASS
3125 }
3226
33- fun createFragmentAdapter (reactContext : ThemedReactContext ): FragmentAdapter {
34- return FragmentAdapter ((reactContext.currentActivity as FragmentActivity ? )!! )
35- }
36-
3727 override fun createViewInstance (reactContext : ThemedReactContext ): ViewPager2 {
3828 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 ()
5230 // https://github.com/callstack/react-native-viewpager/issues/183
5331 vp.isSaveEnabled = false
5432 eventDispatcher = reactContext.getNativeModule(UIManagerModule ::class .java)!! .eventDispatcher
@@ -86,21 +64,17 @@ class PagerViewViewManager : ViewGroupManager<ViewPager2>() {
8664 return vp
8765 }
8866
89- override fun onDropViewInstance (view : ViewPager2 ) {
90- super .onDropViewInstance(view)
91- getReactContext(view)?.removeLifecycleEventListener(lifecycleEventListener)
92- }
93-
9467 private fun setCurrentItem (view : ViewPager2 , selectedTab : Int , scrollSmooth : Boolean ) {
9568 refreshViewChildrenLayout(view)
9669 view.setCurrentItem(selectedTab, scrollSmooth)
9770 }
9871
99- override fun addView (parent : ViewPager2 , child : View , index : Int ) {
72+ override fun addView (parent : ViewPager2 , child : View ? , index : Int ) {
10073 if (child == null ) {
10174 return
10275 }
103- (parent.adapter as FragmentAdapter ? )?.addFragment(child, index)
76+
77+ (parent.adapter as ViewPagerAdapter ? )?.addChild(child, index);
10478
10579 if (parent.currentItem == index) {
10680 // Solves https://github.com/callstack/react-native-pager-view/issues/219
@@ -112,15 +86,15 @@ class PagerViewViewManager : ViewGroupManager<ViewPager2>() {
11286 }
11387
11488 override fun getChildCount (parent : ViewPager2 ): Int {
115- return parent? .adapter?.itemCount ? : 0 ;
89+ return parent.adapter?.itemCount ? : 0 ;
11690 }
11791
11892 override fun getChildAt (parent : ViewPager2 , index : Int ): View {
119- return (parent.adapter as FragmentAdapter ? )!! .getChildViewAt (index)
93+ return (parent.adapter as ViewPagerAdapter ? )!! .getChildAt (index)
12094 }
12195
12296 override fun removeView (parent : ViewPager2 , view : View ) {
123- (parent.adapter as FragmentAdapter ? )?.removeFragment (view)
97+ (parent.adapter as ViewPagerAdapter ? )?.removeChild (view)
12498
12599 // Required so ViewPager actually animates the removed view right away (otherwise
126100 // a white screen is shown until the next user interaction).
@@ -130,13 +104,13 @@ class PagerViewViewManager : ViewGroupManager<ViewPager2>() {
130104
131105 override fun removeAllViews (parent : ViewPager2 ) {
132106 parent.isUserInputEnabled = false
133- val adapter = parent.adapter as FragmentAdapter ?
107+ val adapter = parent.adapter as ViewPagerAdapter ?
134108 adapter?.removeAll()
135109 }
136110
137111 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)
140114
141115 // Required so ViewPager actually animates the removed view right away (otherwise
142116 // a white screen is shown until the next user interaction).
0 commit comments