Обработка BackHandler - PullRequest
       6

Обработка BackHandler

0 голосов
/ 05 июля 2018

Будучи новичком в программировании на 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?

Ответы [ 2 ]

0 голосов
/ 02 апреля 2019

Использовать реагировать-навигация имеет встроенный обработчик задним числом.

0 голосов
/ 05 июля 2018

Вы можете использовать BackHandler для выхода / закрытия приложения:

import { BackHandler } from 'react-native';

BackHandler.exitApp();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...