卸载所有先前安装的屏幕以按回退出应用程序

时间:2020-02-22 16:47:31

标签: react-native react-native-android react-navigation

我有一个要求,当按下后退按钮时,我需要退出该应用程序。基本上,我尝试使用BackHandler API,该API可以运行但有一定的限制。因此,就我而言,我认为最好的方法是卸载所有先前安装的组件,以便当前屏幕成为堆栈中的第一个屏幕。

我有以下屏幕:

登录
OtpVerification
名称
电子邮件
。 。 。

我需要的是,当我在名称屏幕上时,如果有人按下“后退”按钮,则该应用程序应该退出。但是,如果有人在电子邮件屏幕上,则用户应该只能返回到名称屏幕。

使用BackHandler的代码段

constructor(props) {
    super(props);
    .
    .
    BackHandler.addEventListener("hardwareBackPress", this._handleBackPress);
}
.
.
.
.
_handleBackPress = () => {
    BackHandler.exitApp();
};
.
.
.
.
_onPress = () => {
    BackHandler.removeEventListener("hardwareBackPress", this._handleBackPress);
    this.props.navigation.navigate("Email", { name: this.state.name });
};

1 个答案:

答案 0 :(得分:1)

解决方案是在导航到“名称”屏幕之前重置堆栈导航器。

在反应导航中使用 public String Call() { SoapObject request = new SoapObject(TARGET_NAMESPACE,OPERATION_NAME); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( SoapEnvelope.VER11); envelope.dotNet = true; envelope.setOutputSoapObject(request); HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS); Object response = null; try { httpTransport.call(SOAP_ACTION, envelope); response = envelope.getResponse(); } catch (Exception exception) { response = exception.toString(); } return response.toString(); } 操作来执行此操作。 documentation

执行此功能的快速示例是-

反应导航5-使用CommonActions

reset

反应导航v4.x

    import { CommonActions } from '@react-navigation/native';


    reset = (routeName) => {
        return navigation.dispatch(CommonActions.reset(
                     {
                        index: 0,
                        routes: [{ name: routeName }]
                     }
                  ));
      }

将其放在reset = (routeName) => { return this.props .navigation .dispatch(NavigationActions.reset( { index: 0, actions: [ NavigationActions.navigate({ routeName }) ] })); } 屏幕中,并在导航到OtpVerification时致电reset('NameScreen')

相关答案-https://stackoverflow.com/a/43121263/3262983