我在堆栈导航器返回导航中遇到了一个奇怪的行为。我有一个带有一些图标的应用程序主页,单击图标会打开一个新页面。里面还有页面。Home->Icon1->Page1->Page2->Page3 像这样。
在主屏幕上,我添加了一个 BackHandler 来询问是否退出应用程序,而不是直接退出应用程序。每当我从其他屏幕返回主屏幕时,它都不会询问该选项。它仅在渲染发生并且返回导航时才有效,我认为渲染不会再次发生。如果我在内页上添加 BackHandler,它们根本不起作用。所以我很困惑如何使用 StackNavigator 处理后退导航。
处理主屏幕上返回 android 按钮的代码。在导航到其他屏幕时删除侦听器。如果应用程序打开并且我按下后退按钮,则调用此处理程序,但是当我导航到其他屏幕并返回主页时,不会调用此处理程序并且应用程序直接退出而不显示提示。
componentDidMount() {
SplashScreen.close({animationType: SplashScreen.animationType.fade, duration: 2000, delay: 500})
if (Platform.OS == "android") {
BackHandler.addEventListener('hardwareBackPress', this.handleBackButton);
}
}
handleBackButton = () => {
var route = this.props.navigation.state.routeName;
if(route == 'LoginPage')
{
Alert.alert('Exit App', 'Exiting the application?', [
{
text: 'No',
onPress: () => console.log('Cancel Pressed'),
style: 'cancel'
}, {
text: 'Yes',
onPress: () => BackHandler.exitApp()
}
], {cancelable: false})
}
return true;
}
<TouchableOpacity
activeOpacity={.5}
onPress={() => {
BackHandler.removeEventListener('hardwareBackPress', this.handleBackButton);
navigate("LiveTV")
}}>