android - 处理 BackHandler
问题描述
作为 RN 编程的新手,我正在尝试处理 android 硬件按钮。但是在屏幕上按下它会导致同时进入上一个屏幕并关闭应用程序。我的 StackNavigator 看起来像:
const navigatorApp = StackNavigator({
Screen1: { screen: Screen1 },
Screen2: { screen: Screen2 },
Screen3: { screen: Screen3 },
Screen4: { screen: Screen4 }
})
我试图对像这样的屏幕进行全局后台处理
class HandleHavigation extends React.Component {
componentWillMount () {
if (Platform.OS === 'android') return
BackHandler.addEventListener('hardwareBackPress', () => {
const { dispatch, nav } = this.props
if (nav.routes.length === 1 && (nav.routes[0].routeName === 'Screen1')) {
return false
}
dispatch({ type: 'Navigation/BACK' })
return true
})
}
componentWillUnmount () {
if (Platform.OS === 'android') return
BackHandler.removeEventListener('hardwareBackPress')
}
render () {
return <navigatorApp navigation={addNavigationHelpers({
dispatch: this.props.dispatch,
state: this.props.nav,
addListener: createReduxBoundAddListener('root')
})} />
}
}
const mapStateToProps = state => ({ nav: state.reducer })
export default connect(mapStateToProps)(HandleNavigation)
我还尝试了其他问题中给出的一些解决方案,但没有任何帮助阻止应用程序关闭。
我也想过在每个屏幕上实现 backHandler。在我的应用程序中,每个屏幕都包含顶部按钮的 onPress 功能。这就是为什么我尝试使用 Backhandler 将此操作复制到硬件按钮的原因。但我得到的只是 - 屏幕返回,应用程序同时隐藏。
在我的情况下,是否有任何解决方案可以通过按下硬件后退按钮来防止关闭应用程序?
解决方案
您可以使用BackHandler退出/关闭应用程序:
import { BackHandler } from 'react-native';
BackHandler.exitApp();
推荐阅读
- c# - 值不能为空。参数名称:在洋葱架构师上更改 asp.net 身份密钥后的连接字符串
- javascript - 在 Axios.get promise 之后设置 req.body
- spring-boot - 从镶木地板文件中读取弹簧批处理
- python-3.x - 如何交换字符串并保存
- ms-access - 转到连续子表单中的下一条记录 跳到父表单中的下一条记录
- python - 在 matplotlib 中迭代地添加子图,总数未知
- java - 使用 https 使用不同的 web 服务但只有一个使用证书身份验证后的 Axis2 问题
- android - StackView 小部件未显示
- javascript - 嵌套承诺解决方法
- c# - 如何在 Unity 中更改其他玩家的相机?