diff --git a/Example/android/app/src/main/java/com/swmansion/rnscreens/example/LifecycleAwareView.java b/Example/android/app/src/main/java/com/swmansion/rnscreens/example/LifecycleAwareView.java index 861bda97..2a43b888 100644 --- a/Example/android/app/src/main/java/com/swmansion/rnscreens/example/LifecycleAwareView.java +++ b/Example/android/app/src/main/java/com/swmansion/rnscreens/example/LifecycleAwareView.java @@ -15,11 +15,11 @@ public class LifecycleAwareView extends ReactViewGroup implements LifecycleObser @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) public void onResume() { - Log.e("CAT", "VIEW RESUME"); + Log.e("CAT", "VIEW RESUME " + this); } @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) public void onPause() { - Log.e("CAT", "VIEW PAUSE"); + Log.e("CAT", "VIEW PAUSE " + this); } } diff --git a/Example/android/app/src/main/java/com/swmansion/rnscreens/example/MainApplication.java b/Example/android/app/src/main/java/com/swmansion/rnscreens/example/MainApplication.java index 0377af7f..422d5b50 100644 --- a/Example/android/app/src/main/java/com/swmansion/rnscreens/example/MainApplication.java +++ b/Example/android/app/src/main/java/com/swmansion/rnscreens/example/MainApplication.java @@ -3,6 +3,9 @@ package com.swmansion.rnscreens.example; import android.app.Application; import com.facebook.react.ReactApplication; +import com.facebook.react.bridge.NativeModule; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.uimanager.ViewManager; import com.swmansion.rnscreens.RNScreenPackage; import com.facebook.react.ReactNativeHost; import com.facebook.react.ReactPackage; @@ -10,10 +13,24 @@ import com.facebook.react.shell.MainReactPackage; import com.facebook.soloader.SoLoader; import java.util.Arrays; +import java.util.Collections; import java.util.List; public class MainApplication extends Application implements ReactApplication { + private static class MyPackage implements ReactPackage { + + @Override + public List createNativeModules(ReactApplicationContext reactContext) { + return Collections.emptyList(); + } + + @Override + public List createViewManagers(ReactApplicationContext reactContext) { + return Arrays.asList(new SampleLifecycleAwareViewManager()); + } + } + private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { @Override public boolean getUseDeveloperSupport() { @@ -24,7 +41,8 @@ public class MainApplication extends Application implements ReactApplication { protected List getPackages() { return Arrays.asList( new MainReactPackage(), - new RNScreenPackage() + new RNScreenPackage(), + new MyPackage() ); } diff --git a/android/build.gradle b/android/build.gradle index 102b7a10..101b4e07 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -41,6 +41,7 @@ repositories { dependencies { compile 'com.facebook.react:react-native:+' + compile 'com.android.support:appcompat-v7:26.+' } def configureReactNativePom(def pom) { diff --git a/android/src/main/java/com/swmansion/rnscreens/Screen.java b/android/src/main/java/com/swmansion/rnscreens/Screen.java index b69e0900..d64b20de 100644 --- a/android/src/main/java/com/swmansion/rnscreens/Screen.java +++ b/android/src/main/java/com/swmansion/rnscreens/Screen.java @@ -60,6 +60,9 @@ public class Screen extends ViewGroup { } public void setActive(boolean active) { + if (active == mActive) { + return; + } mActive = active; if (mContainer != null) { mContainer.notifyChildUpdate(); diff --git a/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.java b/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.java index 96df19d1..d904e000 100644 --- a/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.java +++ b/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.java @@ -26,6 +26,7 @@ public class ScreenContainer extends ViewGroup { private @Nullable FragmentTransaction mCurrentTransaction; private boolean mNeedUpdate; + private boolean mIsAttached; private ChoreographerCompat.FrameCallback mFrameCallback = new ChoreographerCompat.FrameCallback() { @Override @@ -95,7 +96,7 @@ public class ScreenContainer extends ViewGroup { private void tryCommitTransaction() { if (mCurrentTransaction != null) { - mCurrentTransaction.commitNow(); + mCurrentTransaction.commit(); mCurrentTransaction = null; } } @@ -121,8 +122,21 @@ public class ScreenContainer extends ViewGroup { return screen.isActive(); } + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + mIsAttached = true; + updateIfNeeded(); + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + mIsAttached = false; + } + private void updateIfNeeded() { - if (!mNeedUpdate || mFragmentManager.isDestroyed()) { + if (!mNeedUpdate || mFragmentManager.isDestroyed() || !mIsAttached) { return; } mNeedUpdate = false;