diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/FlatUIImplementation.java b/ReactAndroid/src/main/java/com/facebook/react/flat/FlatUIImplementation.java index 969e53e23..b7b30b50b 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/FlatUIImplementation.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/FlatUIImplementation.java @@ -389,6 +389,12 @@ public class FlatUIImplementation extends UIImplementation { mStateBuilder.applyUpdates(eventDispatcher, (FlatRootShadowNode) cssNode); } + @Override + public void removeRootView(int rootViewTag) { + mStateBuilder.removeRootView(rootViewTag); + super.removeRootView(rootViewTag); + } + @Override public void setJSResponder(int possiblyVirtualReactTag, boolean blockNativeResponder) { ReactShadowNode node = resolveShadowNode(possiblyVirtualReactTag); diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/StateBuilder.java b/ReactAndroid/src/main/java/com/facebook/react/flat/StateBuilder.java index dee6124cc..b29e5e75d 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/StateBuilder.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/StateBuilder.java @@ -116,6 +116,15 @@ import com.facebook.react.uimanager.events.EventDispatcher; mOperationsQueue.enqueueProcessLayoutRequests(); } + /* package */ void removeRootView(int rootViewTag) { + // Don't remove Views that are connected to a View that we are about to remove. + for (int i = mViewsToDrop.size() - 1; i >= 0; --i) { + if (mViewsToDrop.get(i).getRootNode().getReactTag() == rootViewTag) { + mViewsToDrop.remove(i); + } + } + } + /** * Adds a DrawCommand for current mountable node. */