【发布时间】:2019-08-16 15:12:30
【问题描述】:
我正在开发一个 react-native 移动应用程序,我使用过 react-native-router-flux
我有一个场景如下
1- Screen1
2- Screen2
3- Screen3
4- Screen4
当我在屏幕 4 上按下 android 后退按钮时,它会进入屏幕 3,然后是 2,然后是 1 但是当我在 screen1 上按下 android 后退按钮时,它应该退出应用程序,但它不起作用
这是我的路由器堆栈
<Router navigationBarStyle={styles.navBar} titleStyle={styles.navTitle} navBarTintColor={'white'} navBarButtonImageColor={'white'} tintColor={'white'} sceneStyle={styles.routerScene} >
<Stack key="root">
<Scene
key="Screen1"
component={Screen1}
animation="fade"
hideNavBar={true}
initial={true}
type='replace'
/>
<Scene
key="Screen2"
component={Screen2}
animation="fade"
hideNavBar={true}
type='replace'
/>
<Scene
key="Screen3"
component={Screen3}
title="Enrollment"
animation="slide"
hideNavBar={false}
type='replace'
/>
<Scene
key="Screen4"
component={Screen4}
title="Enrollment"
animation="slide"
hideNavBar={false}
type='replace'
/>
我也尝试过使用下面的代码
componentWillMount(){
BackHandler.addEventListener('hardwareBackPress', this.onBackPress.bind(this));
}
componentWillUnmount(){
BackHandler.removeEventListener('hardwareBackPress', this.onBackPress.bind(this));
}
onBackPress() {
if (backButtonPressedOnceToExit) {
BackAndroid.exitApp();
} else {
if (Actions.currentScene !== 'Home') {
Actions.pop();
return true;
} else {
backButtonPressedOnceToExit = true;
ToastAndroid.show("Press Back Button again to exit",ToastAndroid.SHORT);
//setting timeout is optional
setTimeout( () => { backButtonPressedOnceToExit = false }, 2000);
return true;
}
}
}
当我尝试调试它时,我的调试器不会进入函数内部。 请让我知道我做错了什么。
【问题讨论】:
-
是因为
setTimeout( () => { backButtonPressedOnceToExit = false }, 2000);这一行在你按回退出之前重置了backButtonPressedOnceToExit标志吗? -
@max23_ 我尝试删除它但不起作用,甚至我的调试器也无法使用该功能
-
当你说“调试器不会去那个函数”时,你的意思是
onBackPress()吗? -
我的反应服务器在重启后出现了一些问题。
标签: react-native react-native-router-flux