0
const RootNav = createStackNavigator(
  {
    Splash: {
        screen:Splash
    },
    BeforeLogin: {
        screen:BeforeLogin
    },    
    Signin: {
        screen:Signin,
    },
    Signup: {
        screen:Signup
    },
    Tabs: {
        screen:TabHolder,
    },
    ForgotPassword: {
        screen:ForgotPassword
    },
  } );

componentWillMountBeforeLogin屏幕上使用它。当用户按下 android 后退按钮时,我想关闭应用程序。

 componentWillMount() {          // In BeforeLogin Screen
   BackHandler.addEventListener('hardwareBackPress',() => {        
       BackHandler.exitApp(); 
     });  
  }

在屏幕上SignupSignin我正在使用以下内容componentWillMount

componentWillMount() {
    BackHandler.addEventListener('hardwareBackPress',() => {   

      this.props.navigation.goBack();
      return true;

    });
  } 

我无法使用this.props.navigation.navigate('BeforeLogin),因为在登录屏幕中,我有一个文本没有帐户?立即注册,导航到注册屏幕。

和一个已经有帐户?现在在我的注册屏幕上登录,该屏幕导航到登录屏幕。

到目前为止,我尝试了所有代码,当我从BeforeLogin屏幕按下 android 后退按钮时,我现在无法关闭应用程序。

我用goBack(null) too, it takes me to theSplash screen when I press android back button fromBeforeLogin` 屏幕进行了尝试。

************************ 第二个也不起作用的替代方案 ******************** **

我用this.props.navigation.pop(1);SignupSignin屏幕上。Splash当我从屏幕按下 android 后退按钮时,它会将我带到BeforeLogin屏幕。

请帮忙。

更新代码

请检查以下链接。这是我的问题的代码。 https://gist.github.com/shubham6996/2c69f5a270d88c710ab61487639bf1af

4

1 回答 1

0

在单击后要关闭屏幕的屏幕中(我假设在 BeforeLogin 中):

constructor(props) {
    super(props);
    this._didFocusSubscription = props.navigation.addListener('didFocus', payload =>
      BackHandler.addEventListener('hardwareBackPress', this.onBackButtonPressAndroid)
    );
  }

  componentDidMount() {
    this._willBlurSubscription = this.props.navigation.addListener('willBlur', payload =>
      BackHandler.removeEventListener('hardwareBackPress', this.onBackButtonPressAndroid)
    );
  }

  onBackButtonPressAndroid = () => {
BackHandler.exitApp();
return true;
}

由于堆栈导航在那里的工作方式,您不能依赖 React Navigation 中 React 的常规生命周期(事实上,它们仅获得一次生命周期,因为它们仍然安装在下面)。所以基本上你需要依赖导航本身发送的特殊事件。

于 2019-02-04T13:44:06.990 回答