react-navigation/native-stack 未在 Android 上工作
react-navigation/native-stack not working on Android
我收到以下错误:
E/unknown:ReactNative: Exception in native call
java.lang.IllegalStateException: In order to use RNScreens components your app's activity need to extend ReactActivity
at com.swmansion.rnscreens.ScreenContainer.setupFragmentManager(ScreenContainer.kt:169)
at com.swmansion.rnscreens.ScreenContainer.onAttachedToWindow(ScreenContainer.kt:199)
at android.view.View.dispatchAttachedToWindow(View.java:21304)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:4239)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:4246)
at android.view.ViewGroup.addViewInner(ViewGroup.java:6001)
at android.view.ViewGroup.addView(ViewGroup.java:5777)
at android.view.ViewGroup.addView(ViewGroup.java:5717)
at com.facebook.react.uimanager.ViewGroupManager.addView(ViewGroupManager.java:37)
at com.facebook.react.uimanager.NativeViewHierarchyManager.manageChildren(NativeViewHierarchyManager.java:533)
at com.facebook.react.uimanager.UIViewOperationQueue$ManageChildrenOperation.execute(UIViewOperationQueue.java:217)
at com.facebook.react.uimanager.UIViewOperationQueue.run(UIViewOperationQueue.java:915)
at com.facebook.react.uimanager.UIViewOperationQueue.flushPendingBatches(UIViewOperationQueue.java:1026)
at com.facebook.react.uimanager.UIViewOperationQueue.access00(UIViewOperationQueue.java:47)
at com.facebook.react.uimanager.UIViewOperationQueue$DispatchUIFrameCallback.doFrameGuarded(UIViewOperationQueue.java:1086)
at com.facebook.react.uimanager.GuardedFrameCallback.doFrame(GuardedFrameCallback.java:29)
at com.facebook.react.modules.core.ReactChoreographer$ReactChoreographerDispatcher.doFrame(ReactChoreographer.java:175)
at com.facebook.react.modules.core.ChoreographerCompat$FrameCallback.doFrame(ChoreographerCompat.java:85)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:997)
at android.view.Choreographer.doCallbacks(Choreographer.java:797)
at android.view.Choreographer.doFrame(Choreographer.java:728)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:984)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:8167)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)
当我尝试改变时:
public class RnActivity extends Activity implements DefaultHardwareBackBtnHandler {
到 public class RnActivity extends ReactActivity implements DefaultHardwareBackBtnHandler {
,如错误提示,我收到一个新错误:
E/mk_d : Utils: Error: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.rn_management.RnActivity}: java.lang.ClassCastException: com.android.Application cannot be cast to com.facebook.react.ReactApplication
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3654)
当我从我的 RN 包中删除 react-navigation/native-stack 时,一切正常。
此外,我收到以下错误(是否相关?):
E/ThemeUtils: View class com.facebook.react.views.text.ReactTextView is and AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant)
您使用的是旧版本的 React Native 吗?检查您的 android/app/src/main/java/com/(your app)/MainActivity.java
文件并更改第一个 class 行以扩展 ReactActivity(如果它还没有)-
public class MainActivity extends ReactActivity {
...
这应该可以解决您遇到的错误 - ReactActivity 也 extends a compat class 所以它也可能会解决您的其他问题
React-native-screens 是 react-navigation 依赖项之一,因此您需要使用它才能使导航正常工作。使用 ReactActivity 扩展您的 Activity 并在原生 Android 代码中创建或编辑您的应用程序 class:
class YourApplication : Application(), ReactApplication, LifecycleObserver {...}
如果您想将 react-native 集成到现有的应用程序中并且不想实施 ReactApplication 和 ReactActivity,https://reactnative.dev/docs/integration-with-existing-apps 此处的 link 很有用。
我收到以下错误:
E/unknown:ReactNative: Exception in native call
java.lang.IllegalStateException: In order to use RNScreens components your app's activity need to extend ReactActivity
at com.swmansion.rnscreens.ScreenContainer.setupFragmentManager(ScreenContainer.kt:169)
at com.swmansion.rnscreens.ScreenContainer.onAttachedToWindow(ScreenContainer.kt:199)
at android.view.View.dispatchAttachedToWindow(View.java:21304)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:4239)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:4246)
at android.view.ViewGroup.addViewInner(ViewGroup.java:6001)
at android.view.ViewGroup.addView(ViewGroup.java:5777)
at android.view.ViewGroup.addView(ViewGroup.java:5717)
at com.facebook.react.uimanager.ViewGroupManager.addView(ViewGroupManager.java:37)
at com.facebook.react.uimanager.NativeViewHierarchyManager.manageChildren(NativeViewHierarchyManager.java:533)
at com.facebook.react.uimanager.UIViewOperationQueue$ManageChildrenOperation.execute(UIViewOperationQueue.java:217)
at com.facebook.react.uimanager.UIViewOperationQueue.run(UIViewOperationQueue.java:915)
at com.facebook.react.uimanager.UIViewOperationQueue.flushPendingBatches(UIViewOperationQueue.java:1026)
at com.facebook.react.uimanager.UIViewOperationQueue.access00(UIViewOperationQueue.java:47)
at com.facebook.react.uimanager.UIViewOperationQueue$DispatchUIFrameCallback.doFrameGuarded(UIViewOperationQueue.java:1086)
at com.facebook.react.uimanager.GuardedFrameCallback.doFrame(GuardedFrameCallback.java:29)
at com.facebook.react.modules.core.ReactChoreographer$ReactChoreographerDispatcher.doFrame(ReactChoreographer.java:175)
at com.facebook.react.modules.core.ChoreographerCompat$FrameCallback.doFrame(ChoreographerCompat.java:85)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:997)
at android.view.Choreographer.doCallbacks(Choreographer.java:797)
at android.view.Choreographer.doFrame(Choreographer.java:728)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:984)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:8167)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)
当我尝试改变时:
public class RnActivity extends Activity implements DefaultHardwareBackBtnHandler {
到 public class RnActivity extends ReactActivity implements DefaultHardwareBackBtnHandler {
,如错误提示,我收到一个新错误:
E/mk_d : Utils: Error: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.rn_management.RnActivity}: java.lang.ClassCastException: com.android.Application cannot be cast to com.facebook.react.ReactApplication
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3654)
当我从我的 RN 包中删除 react-navigation/native-stack 时,一切正常。
此外,我收到以下错误(是否相关?):
E/ThemeUtils: View class com.facebook.react.views.text.ReactTextView is and AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant)
您使用的是旧版本的 React Native 吗?检查您的 android/app/src/main/java/com/(your app)/MainActivity.java
文件并更改第一个 class 行以扩展 ReactActivity(如果它还没有)-
public class MainActivity extends ReactActivity {
...
这应该可以解决您遇到的错误 - ReactActivity 也 extends a compat class 所以它也可能会解决您的其他问题
React-native-screens 是 react-navigation 依赖项之一,因此您需要使用它才能使导航正常工作。使用 ReactActivity 扩展您的 Activity 并在原生 Android 代码中创建或编辑您的应用程序 class:
class YourApplication : Application(), ReactApplication, LifecycleObserver {...}
如果您想将 react-native 集成到现有的应用程序中并且不想实施 ReactApplication 和 ReactActivity,https://reactnative.dev/docs/integration-with-existing-apps 此处的 link 很有用。