最小化React Native应用程序而不返回

问题描述 投票:0回答:3

我正常从屏幕 A 导航到屏幕 B

我想将屏幕 B 作为应用程序的根目录/导航应忽略屏幕 A 并将屏幕 B 作为根目录

因此在屏幕 B 中,当用户点击 Android 导航返回时,它应该最小化应用程序 不返回屏幕A

这是我在屏幕 B 中的代码

BackHandler.addEventListener("hardwareBackPress" , () => {
  BackHandler.exitApp();
});

当我按下 Android 后退按钮时

实际结果

它最小化应用程序,当我再次打开它时,它显示屏幕A

预期结果

它应该只最小化应用程序,当我再次打开它时,它会显示相同的屏幕B

顺便问一下,有什么方法可以将屏幕作为根,而不是手动放置这么多监听器并使事情变得复杂吗?

更正确的含义是,以编程方式更改根屏幕,因为 React Navigation 仅初始化它,以后无法更改它

示例

const RootNavigator = createSwitchNavigator(
  {
     ScreenA : ScreenA,
     ScreenB : ScreenB
  },
  {
    initialRouteName: 'ScreenA' // I mean here
  }
);

如果我想在 ReactNavigation 初始化后在运行时更改这个initialRouteName,该怎么办

android react-native react-navigation
3个回答
0
投票

0
投票

如果您需要将initialRouteName设置为道具,那是因为在渲染应用程序导航之前需要异步获取一些数据。处理此问题的另一种方法是使用 switchnavigator 并在获取异步数据时显示一个屏幕,然后在必要时使用参数导航到适当的初始路由。有关完整示例,请参阅 docs

这是一个开放的 RFC


0
投票

返回 true 以防止默认后退行为,并在 useFocusEffect 中添加此事件侦听器,以确保当我们更改屏幕时它重置为默认值,因为 addEventListener 已全局注册

useFocusEffect(() => {
    let onBackPress = () => {
      BackHandler.exitApp()
      true
    }
    let _ = BackHandler.addEventListener(#hardwareBackPress, onBackPress)
    Some(() => BackHandler.removeEventListener(#hardwareBackPress, onBackPress))
  })

这段代码是用rescript写的

© www.soinside.com 2019 - 2024. All rights reserved.