const RootNav = createStackNavigator(
{
Splash: {
screen:Splash
},
BeforeLogin: {
screen:BeforeLogin
},
Signin: {
screen:Signin,
},
Signup: {
screen:Signup
},
Tabs: {
screen:TabHolder,
},
ForgotPassword: {
screen:ForgotPassword
},
} );
以下是我在
BackHandler
屏幕中使用的BeforeLogin
。 componentWillMount() {
BackHandler.addEventListener('hardwareBackPress', this.handleBackButton);
}
componentWillUnmount() {
BackHandler.removeEventListener('hardwareBackPress', this.handleBackButton);
}
handleBackButton = () => {
BackHandler.exitApp();
}
以下是我在
BackHandler
屏幕和Signin
屏幕中使用的Signup
。 componentDidMount() {
BackHandler.addEventListener('hardwareBackPress',() => {
this.props.navigation.navigate('BeforeLogin');
return true;
});
}
我的
BeforeLogin
屏幕上有2个按钮。登录和注册,将我导航到Signin
和Signup
屏幕。现在,我面临两种情况。
方案1:我在
BeforeLogin
屏幕上,我不导航到Signin
或Signup
屏幕。现在,当我按我的android back buttton时,它会关闭该应用程序。这就是我想要的,当用户从BeforeLogin
屏幕按下后退按钮时能够关闭该应用程序。方案2:我在
BeforeLogin
屏幕上,然后导航到Signin
或Signup
屏幕。现在,当我返回到BeforeLogin
屏幕并按android后退按钮时,该应用程序现在没有关闭。我该如何解决方案2 :?请帮忙。
最佳答案
不要不必要地使用backhander
,因为它不会在ios
设备上运行。
使用this.props.navigation.replace("")
导航
即,如果您从A导航到B,并且不想在按下“后退”按钮时返回A,请不要使用this.props.navigation.navigate("B")
改为使用this.props.navigation.replace("B")
要么
尝试[email protected]
的新功能SwitchNavigator
。
在默认情况下,当按下后退按钮时,应用程序将针对开关导航器中使用的所有路线屏幕关闭。
因此,请在SwitchNavigator中定义要为其退出应用程序的所有屏幕,并在StackNavigator中定义所有其他屏幕或您使用的任何屏幕。