ReactNative 在用react-navigation组件时,没有 navigator.getCurrentRoutes(); 这个方法时,Android监听返回键,在某个页面返回键退出应用
16lz
2021-01-23
在之前项目中,在进行返回键退出应用时,应用的代码如下:
componentWillMount(){ if (Platform.OS === 'android') { BackHandler.addEventListener('hardwareBackPress', this.onBackAndroid); }}
componentWillUnmount(){ if (Platform.OS === 'android') { BackHandler.removeEventListener('hardwareBackPress', this.onBackAndroid); }}
onBackAndroid = () => {
const navigator = this.refs.navigator;
const { navigator } = this.props;
const routers = navigator.getCurrentRoutes();
console.log('当前路由长度:'+routers.length);
if (routers.length > 1) {
navigator.pop();
return true;//接管默认行为
}
return false;//默认行为
};
可是在后面的项目中,用的是 react-navigation 这个组件,这个组件中没有getCurrentRoutes()这个方法了,所以没办法用上面的代码了。如果我们现在依旧想要达到在主页连续进行两次返回键,则退出APP怎么办呢?如下代码:
componentWillMount() { if (Platform.OS === 'android') { BackHandler.addEventListener('hardwareBackPress', this.onBackAndroid); }}componentWillUnmount(){ if (Platform.OS === 'android') { BackHandler.removeEventListener('hardwareBackPress', this.onBackAndroid); }};
上面这一部分依旧不变,
onBackAndroid = () => { //禁用返回键 if(this.props.navigation.isFocused()){//判断 该页面是否处于聚焦状态 if (this.lastBackPressed && this.lastBackPressed + 2000 >= Date.now()) { BackHandler.exitApp();//直接退出APP }else{ this.lastBackPressed = Date.now(); ToastAndroid.show('再按一次退出应用', 1000);//提示 return true; } }}
这里,我们用到的是this.props.navigation.isFocused() 的isFocused()这个方法来判断,改页面是否处于聚焦状态,如果是,则进行连续点击两次返回键,退出APP。如果不是,则执行返回操作。
更多相关文章
- Android代码中运行shell命令
- Android获取cpu和内存信息、网址的代码
- Android Studio 配置SVN 及 代码管理
- Android命令行测试BT,WIFI,Sensor工作状态
- 【Android】Android 9.0 隐藏虚拟按键跟状态栏,除去google搜索栏
- Android中拍照、图片、录音、视频和音频功能的方法和代码
- 【Android休眠】之Android对PowerKey事件的处理(1)代码流程
- Android 系统状态栏一体化
- android声音调整源代码分析