React Native - 监听设备back键操作(附:按下返回键后回到上一个页面)
作者:hangge | 2017-08-11 08:10
使用 React Native 开发移动应用时会发现,在 Android 设备上点击 back 键(物理返回键、后退键)会直接退出应用。如果有多个页面路由的话这样做体验不太好。
我们希望按下 back 键后,如果路由栈中有上一页则返回到上一页,如果没有再退出应用。
1,实现原理
(1)通过 React Native 提供的 BackAndroid 这个 API 组件可以监听 back 键操作事件。
(2)在事件响应中判断路由栈的情况,决定是返回上一视图还是退出应用。这里特别要注意 return 返回值:
- 返回 true,表示后退键按下事件已经被处理。
- 返回 false,表示后退事件没有被处理,那么这个事件就会被通知给 Android 操作系统,从而导致系统结束当前应用。
2,样例代码
import React, { Component } from 'react'; import { AppRegistry, StyleSheet, Navigator, BackAndroid, Platform, } from 'react-native'; class App extends Component { //构造函数 constructor(props) { super(props); } //组件初始渲染执行完毕后调用 componentDidMount() { //如果当前是Android系统,则添加back键按下事件监听 if(Platform.OS === "android") { BackAndroid.addEventListener('hardwareBackPress', ()=>{ return this.handleBackAndroid(this.navigator); }); } } //组件被卸载前会执行 componentWillUnmount() { //如果当前是Android系统,则移除back键按下事件监听 if(Platform.OS === "android") { BackAndroid.removeEventListener('hardwareBackPress', ()=>{}); } } //back键按下事件响应 handleBackAndroid(navigator) { //如果存在上一页则后退 if(navigator.getCurrentRoutes().length > 1) { navigator.pop(); return true; //接管默认行为 } return false; //使用默认行为(直接退出应用) } //.......... }
附:BackAndroid API 使用注意事项:
1,可以使用 BackAndroid 的 addEventListener 函数挂接多个监听器
(1)当返回键被按下时,最后一个加入的监听器会首先被执行。
(2)如果它返回 false,再执行倒数第二个加入的监听器......直到某一个监听器返回 true,则剩下的监听器都不会被执行。
(3)或者直到所有的监听器都执行完,将这个事件交给 Android 系统。
2,exitApp() 方法
BackAndroid API 还有一个静态函数 exitApp,能让应用马上结束。它使用很简单,就是无参数直接调用。
...... BackAndroid.exitApp(); //这条语句后面不能再有其他代码 }
全部评论(0)