diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/FlatNativeViewHierarchyManager.java b/ReactAndroid/src/main/java/com/facebook/react/flat/FlatNativeViewHierarchyManager.java index ed8127793..cbdabed8b 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/FlatNativeViewHierarchyManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/FlatNativeViewHierarchyManager.java @@ -32,7 +32,7 @@ import com.facebook.react.uimanager.ViewManagerRegistry; implements ViewResolver { /* package */ FlatNativeViewHierarchyManager(ViewManagerRegistry viewManagers) { - super(viewManagers); + super(viewManagers, new FlatRootViewManager()); } @Override diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/FlatRootViewManager.java b/ReactAndroid/src/main/java/com/facebook/react/flat/FlatRootViewManager.java new file mode 100644 index 000000000..6451d62d2 --- /dev/null +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/FlatRootViewManager.java @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +package com.facebook.react.flat; + +import android.view.ViewGroup; + +import com.facebook.react.uimanager.RootViewManager; + +/* package */ class FlatRootViewManager extends RootViewManager { + + @Override + public void removeAllViews(ViewGroup parent) { + parent.removeAllViewsInLayout(); + } +} diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/FlatViewGroup.java b/ReactAndroid/src/main/java/com/facebook/react/flat/FlatViewGroup.java index 60780d3f8..0d64f58d6 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/FlatViewGroup.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/FlatViewGroup.java @@ -451,6 +451,16 @@ import com.facebook.react.views.view.ReactClippingViewGroupHelper; removeDetachedView(view, false); } + @Override + public void removeAllViewsInLayout() { + // whenever we want to remove all views in a layout, we also want to remove all the + // DrawCommands, otherwise, we can have a mismatch between the DrawView DrawCommands + // and the Views to draw (note that because removeAllViewsInLayout doesn't call invalidate, + // we don't actually need to modify mDrawCommands, but we do it just in case). + mDrawCommands = DrawCommand.EMPTY_ARRAY; + super.removeAllViewsInLayout(); + } + /* package */ void mountAttachDetachListeners(AttachDetachListener[] listeners) { if (mIsAttached) { // Ordering of the following 2 statements is very important. While logically it makes sense to diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/FlatViewManager.java b/ReactAndroid/src/main/java/com/facebook/react/flat/FlatViewManager.java index dd807c80a..5bfe0aee6 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/FlatViewManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/FlatViewManager.java @@ -23,4 +23,9 @@ abstract class FlatViewManager extends ViewGroupManager { public void setBackgroundColor(FlatViewGroup view, int backgroundColor) { // suppress } + + @Override + public void removeAllViews(FlatViewGroup parent) { + parent.removeAllViewsInLayout(); + } }