diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/EventDispatcher.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/EventDispatcher.java index d983eebebad..37fcadda30a 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/EventDispatcher.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/EventDispatcher.java @@ -96,13 +96,14 @@ public class EventDispatcher implements LifecycleEventListener { private Event[] mEventsToDispatch = new Event[16]; private int mEventsToDispatchSize = 0; - private volatile @Nullable ReactEventEmitter mReactEventEmitter = new ReactEventEmitter(); + private volatile ReactEventEmitter mReactEventEmitter; private short mNextEventTypeId = 0; private volatile boolean mHasDispatchScheduled = false; public EventDispatcher(ReactApplicationContext reactContext) { mReactContext = reactContext; mReactContext.addLifecycleEventListener(this); + mReactEventEmitter = new ReactEventEmitter(mReactContext); } /** diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ReactEventEmitter.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ReactEventEmitter.java index 5d07b356477..64aac3f795f 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ReactEventEmitter.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ReactEventEmitter.java @@ -12,6 +12,7 @@ import static com.facebook.react.uimanager.events.TouchesHelper.TARGET_KEY; import android.util.Log; import android.util.SparseArray; import com.facebook.infer.annotation.Assertions; +import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.WritableArray; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.common.UIManagerType; @@ -24,8 +25,11 @@ public class ReactEventEmitter implements RCTEventEmitter { private static final String TAG = ReactEventEmitter.class.getSimpleName(); private final SparseArray mEventEmitters = new SparseArray<>(); + private final ReactApplicationContext mReactContext; - public ReactEventEmitter() { } + public ReactEventEmitter(ReactApplicationContext reactContext) { + mReactContext = reactContext; + } public void register(@UIManagerType int uiManagerType, RCTEventEmitter eventEmitter) { mEventEmitters.put(uiManagerType, eventEmitter); @@ -48,12 +52,16 @@ public class ReactEventEmitter implements RCTEventEmitter { Assertions.assertCondition(touches.size() > 0); - int targetReactTag = touches.getMap(0).getInt(TARGET_KEY); - getEventEmitter(targetReactTag).receiveTouches(eventName, touches, changedIndices); + int reactTag = touches.getMap(0).getInt(TARGET_KEY); + getEventEmitter(reactTag).receiveTouches(eventName, touches, changedIndices); } private RCTEventEmitter getEventEmitter(int reactTag) { int type = ViewUtil.getUIManagerType(reactTag); - return mEventEmitters.get(type); + RCTEventEmitter eventEmitter = mEventEmitters.get(type); + if (eventEmitter == null) { + eventEmitter = mReactContext.getJSModule(RCTEventEmitter.class); + } + return eventEmitter; } }