Будучи новичком в программировании на 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. Но все, что я получаю - экран возвращается назад, и приложение одновременно скрывается.
Есть ли в моем случае решение предотвратить закрытие приложения нажатием кнопки hw?