const RootNav = createStackNavigator(
{
Splash: {
screen:Splash
},
BeforeLogin: {
screen:BeforeLogin
},
Signin: {
screen:Signin,
},
Signup: {
screen:Signup
},
Tabs: {
screen:TabHolder,
},
ForgotPassword: {
screen:ForgotPassword
},
} );
我使用这个componentWillMount
在BeforeLogin
屏幕。我想关闭应用程序时,用户按下机器人后退按钮。
componentWillMount() { // In BeforeLogin Screen
BackHandler.addEventListener('hardwareBackPress',() => {
BackHandler.exitApp();
});
}
而在Signup
和Signin
屏,我用下面的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 the
Splashscreen when I press android back button from
BeforeLogin`屏幕尝试过。
**********************第二种选择也没有工作******************** **
我在this.props.navigation.pop(1);
和Signup
屏幕使用Signin
。这需要我时,我按Android的后退按钮从Splash
屏幕BeforeLogin
屏幕。
请帮忙。
更新后的代码
请检查下面的链接。它的代码,我的问题。 https://gist.github.com/shubham6996/2c69f5a270d88c710ab61487639bf1af
在您要从点击(我假设在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;
}
你不能靠作出反应,作出反应的导航由于如何壮大,导航功能也没有(在事实上,他们得到了一些生命周期只因为它们仍然安装underneth一次)定期的生命周期。所以基本上你需要依靠正由导航本身发送的特殊事件。