Как отключить кнопку возврата устройства на Android (реагировать-родной)? - PullRequest
0 голосов
/ 13 декабря 2018

Как отключить кнопку возврата физического устройства на Android с помощью React-Native?Я не хочу включать его для пользователя.

Ответы [ 3 ]

0 голосов
/ 18 декабря 2018

Нет встроенной поддержки от React Native Navigation на сегодняшний день на v2.Однако вы можете использовать BackHandler от самого React native.Чтобы обработать его и вернуть false, чтобы отключить его.

Документ включен BackHandler

Пример

BackHandler.addEventListener('hardwareBackPress', function() {
  return false;
});
0 голосов
/ 19 декабря 2018

Текущий открытый экран отслеживается слушателем, созданным при запуске приложения, в app.js.Основной компонент приложения создает прослушиватель BackHandler, который реагирует на кнопку возврата устройства в соответствии с текущим открытым экраном.

Основной компонент:

componentDidMount() {
  BackHandler.addEventListener('hardwareBackPress', this.onBackPress);
}

componentWillUnmount() {
  BackHandler.removeEventListener('hardwareBackPress', this.onBackPress);
}

onBackPress = () => {
  if (this.props.currentScreen.name === 'app.main') {
     Alert.alert(
       'Confirm exit',
       'Do you want to exit App?',
       [
         {text: 'CANCEL', style: 'cancel'},
         {text: 'OK', onPress: () => {
           BackHandler.exitApp()
          }
        }
       ]
    );
  } else {
    Navigation.pop(this.props.currentScreen.id);
  }

  return true;
}

App.js

//register to compomentDidApperaListener to keep track on which screen is currently open. The componentName and Id are stored in my redux store
Navigation.events().registerComponentDidAppearListener(({ componentId, componentName }) => {
  store.dispatch(updateCurrentScreen({'name': componentName, 'id': componentId}))
})
0 голосов
/ 13 декабря 2018

В действии вы можете переопределить onBackPressed() и прокомментировать вызов суперкласса.

@Override
public void onBackPressed() {
  // super.onBackPressed(); comment this line to disable back button  press
}
...