React native 应用程序退出后点击android在反应本机?

React native 应用程序退出后点击android在反应本机?,react-native,react-native-android,react-navigation,React Native,React Native Android,React Navigation,在Android Mi Note 3上,硬件后退按钮没有触发handleBackPress,此时我将单击后退退出应用程序 我已执行以下代码,但未调用handleBackPress componentDidMount() { BackHandler.addEventListener('hardwareBackPress', this.handleBackPress); } componentWillUnmount() { BackHandler.removeEventL

在Android Mi Note 3上,硬件后退按钮没有触发
handleBackPress
,此时我将单击后退退出应用程序

我已执行以下代码,但未调用
handleBackPress

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

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

  handleBackPress = () => {
    this.goBack(); // works best when the goBack is async
    return true;
  }
导航代码:

const ModalSignUp = createStackNavigator(
  {
    Signup: { screen: Signup, key: 'Signup' },
    PartyList: { screen: PartyList, key: 'PartyList' },
    StatesList: { screen: StatesList, key: 'StatesList' },

  },
  {
    initialRouteName: 'Signup',
    headerMode: 'none',
    mode: 'card',
  }
);
导航:

this.props.navigation.push("StatesList")
期望值:

const ModalSignUp = createStackNavigator(
  {
    Signup: { screen: Signup, key: 'Signup' },
    PartyList: { screen: PartyList, key: 'PartyList' },
    StatesList: { screen: StatesList, key: 'StatesList' },

  },
  {
    initialRouteName: 'Signup',
    headerMode: 'none',
    mode: 'card',
  }
);
返回单击硬件按钮,转到上一屏幕。

尝试以下操作:

import {BackHandler} from 'react-native';

export default class Component extends Component {
     _didFocusSubscription;
     _willBlurSubscription;
     constructor(props) {
         super(props);
         this._didFocusSubscription = props.navigation.addListener('didFocus',payload =>
            BackHandler.addEventListener('hardwareBackPress', this.onBackButtonPressAndroid)
         ); 
     }
  }
componentDidMount() {
        this._willBlurSubscription = this.props.navigation.addListener('willBlur', payload =>
            BackHandler.removeEventListener('hardwareBackPress', this.onBackButtonPressAndroid)
        );
 }
componentWillUnmount() {
        this._didFocusSubscription && this._didFocusSubscription.remove();
        this._willBlurSubscription && this._willBlurSubscription.remove();
    }
onBackButtonPressAndroid = () => {
    //code when you press the back button
 };

尝试使用
return false
而不是
return true

您的错误可能会妨碍您查看下一个
react导航

您需要使用
.push
在堆栈上创建一个新视图,当您单击后退按钮时,将触发
.goBack()

默认情况下,“上一步”按钮将始终使导航返回堆栈,但如果堆栈中只有一个视图(仅使用
。导航
),则应用程序将退出

不确定如何在视图中导航,但这可能是一个解决方案

编辑:要解决此问题,在视图中导航时,使用
导航。按('viewname')
而不是
导航。导航('viewname')
。您不需要任何其他方法(如您在问题中提出的方法)


还要检查以了解导航的工作原理,或者尝试一下。。。这一个对我有效:在
组件中,将卸载

BackHandler.removeEventListener('hardwareBackPress', () => {});
另外,确保在每种情况下都签入
this.goBack()
返回
某物

goback = () => {
   if (condition2) 
     // handling
    return something;

  if (condition2)
   // handling
   return something;

  // default:
  return true;
};

1。导入

import { BackHandler, DeviceEventEmitter } from 'react-native'
2。构造函数

constructor(props) {
    super(props)
    this.backPressSubscriptions = new Set()
  }
3。添加和删除侦听器

componentDidMount() {
    DeviceEventEmitter.removeAllListeners('hardwareBackPress')
    DeviceEventEmitter.addListener('hardwareBackPress', () => {
        let invokeDefault = true
        const subscriptions = []

        this.backPressSubscriptions.forEach(sub => subscriptions.push(sub))

        for (let i = 0; i < subscriptions.reverse().length; i += 1) {
            if (subscriptions[i]()) {
                invokeDefault = false
                break
            }
        }

        if (invokeDefault) {
            BackHandler.exitApp()
        }
    })

    this.backPressSubscriptions.add(this.handleHardwareBack)
}

componentWillUnmount() {
    DeviceEventEmitter.removeAllListeners('hardwareBackPress')
    this.backPressSubscriptions.clear()
}

是的,我在react导航代码中也做了同样的操作。但也不工作。是否要禁用“硬件后退”按钮功能?不,我不想禁用。但是,当点击硬件返回时,转到上一屏幕。你在其他手机上测试过吗?这只发生在Mi Note 3或其他情况下?在中使用react navigation,您无法返回?是的。我使用react导航。在旧版本中,它是。工作在我最老的应用程序中,它很好。在stacknavigation中,它有四个视图,我将在end视图中导航。我还添加了“所有视图后退”按钮。其中goBack()函数是实现。所以背面的设计很好。但如果单击硬件返回应用程序是退出。但您使用
。推送
。导航
?导航是退出used@KiritModi请检查我的anwser,如果您想在后退按钮上返回,请使用
.push()
而不是
.navigate()
,这就是为什么应用程序退出而不是返回到上一个视图的原因感谢帮助,终于找到了解决办法。如果您在所有视图中都使用
.push()
,我不认为您需要这样做。我有一个应用程序可以使用
react导航
,它可以根据您的需要工作,而无需执行此操作。你说过这会发生在所有的设备上,但我认为这只会发生在特定的设备上。如果你处理得好,这在某些情况下确实有效