react-native - react-native-router-flux backAndroidHandler 不工作
问题描述
我正在开发一个我使用过的原生反应移动应用程序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;
}
}
}
当我尝试调试它时,我的调试器不会进入函数内部。请让我知道我做错了什么。
解决方案
使用组件backAndroidHandler
的道具Router
。
<Router navigationBarStyle={styles.navBar} titleStyle={styles.navTitle} navBarTintColor={'white'} navBarButtonImageColor={'white'} tintColor={'white'} sceneStyle={styles.routerScene} backAndroidHandler={this.onBackPress}>
在 中onBackPress
,您提到了错误的屏幕。Home
不在您的路由器堆栈中。让它Screen1
。在第一个 if 条件下也“返回 true”。
推荐阅读
- pandas - Dask 无法从简单(非 Hive)Parquet 文件中恢复分区
- github - 在 Github 的 README.md 中添加带有链接的图像?
- django - 完整性错误:唯一约束失败:dating_app_uservote.user_id,dating_app_uservote.voter_id Django
- c# - 我可以更改默认的 /// 方法注释片段吗?
- amazon-web-services - lambda 函数输出错误“e 不是函数”
- wpf - 为 DataGridTemplateColumn 指定数据上下文
- tensorflow - Tensorflow nsl与cleverhans中使用FGSM的对抗性训练/扰动之间的区别
- reactjs - React Hook useReducer 总是运行两次
- java - 从另一个类调用变量时获取 Null
- python - 我需要使用 xarray 使用加权纬度计算 netCDF CF 文件中的全局平均值,然后转换为 pandas