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 cbdabed8b..84b3fbff0 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/FlatNativeViewHierarchyManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/FlatNativeViewHierarchyManager.java @@ -11,7 +11,9 @@ package com.facebook.react.flat; import javax.annotation.Nullable; +import java.util.ArrayList; import java.util.Collection; +import java.util.List; import android.graphics.Rect; import android.view.View; @@ -90,10 +92,15 @@ import com.facebook.react.uimanager.ViewManagerRegistry; ViewGroup viewGroup = (ViewGroup) view; ViewGroupManager viewManager = (ViewGroupManager) resolveViewManager(reactTag); - for (int i = 0; i < viewsToAdd.length; ++i) { - int tag = Math.abs(viewsToAdd[i]); - viewManager.addView(viewGroup, resolveView(tag), i); + List listOfViews = new ArrayList<>(viewsToAdd.length); + + // batch the set of additions - some view managers can take advantage of the batching to + // decrease operations, etc. + for (int viewIdToAdd : viewsToAdd) { + int tag = Math.abs(viewIdToAdd); + listOfViews.add(resolveView(tag)); } + viewManager.addViews(viewGroup, listOfViews); } /** @@ -171,9 +178,7 @@ import com.facebook.react.uimanager.ViewManagerRegistry; ViewGroup viewGroup = (ViewGroup) view; ViewGroupManager viewManager = (ViewGroupManager) resolveViewManager(viewTag); - for (int i = viewManager.getChildCount(viewGroup) - 1; i >= 0; --i) { - viewManager.removeViewAt(viewGroup, i); - } + viewManager.removeAllViews(viewGroup); } } } 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 0aaaed255..c89cfdc77 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/FlatUIImplementation.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/FlatUIImplementation.java @@ -57,6 +57,7 @@ public class FlatUIImplementation extends UIImplementation { viewManagers.add(new RCTTextInlineImageManager()); viewManagers.add(new RCTImageViewManager()); viewManagers.add(new RCTTextInputManager()); + viewManagers.add(new RCTViewPagerManager()); viewManagers.add(new RCTModalHostManager(reactContext)); ViewManagerRegistry viewManagerRegistry = new ViewManagerRegistry(viewManagers); diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/RCTViewPagerManager.java b/ReactAndroid/src/main/java/com/facebook/react/flat/RCTViewPagerManager.java new file mode 100644 index 000000000..a3210043d --- /dev/null +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/RCTViewPagerManager.java @@ -0,0 +1,30 @@ +/** + * 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 java.util.List; + +import android.view.View; + +import com.facebook.react.views.viewpager.ReactViewPager; +import com.facebook.react.views.viewpager.ReactViewPagerManager; + +/* package */ class RCTViewPagerManager extends ReactViewPagerManager { + + @Override + public void addViews(ReactViewPager parent, List views) { + parent.setViews(views); + } + + @Override + public void removeAllViews(ReactViewPager parent) { + parent.removeAllViewsFromAdapter(); + } +}