如何在Android上(本机)禁用设备后退按钮?

时间:2018-12-13 09:03:13

标签: react-native-navigation wix-react-native-navigation react-native-navigation-v2

如何在带有React-Native的Android上禁用物理设备后退按钮?我不想为用户启用它。

3 个答案:

答案 0 :(得分:1)

到目前为止,v2上还没有React Native Navigation的开箱即用支持。但是,您可以使用React native本身的BackHandler。要处理它并返回false来禁用它。

BackHandler上的文档

示例

BackHandler.addEventListener('hardwareBackPress', function() {
  return false;
});

答案 1 :(得分:0)

在活动中,您可以覆盖onBackPressed()并注释对超类的调用。

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

答案 2 :(得分:0)

使用在应用程序启动时在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}))
})