React-Native BackHandler总是关闭Android中的应用程序(硬件返回)

问题描述 投票:2回答:2

我正在使用react-native v0.44.0redux v5.0.5建立一个使用react-navigation v1.0.0-beta.11的应用程序。路由使用嵌套导航器,一个主StackNavigator和DrawerNavigator完成。 我正在处理导航减速器中的所有导航事件,也使用BackHandler处理Android上的硬件背压。现在是奇怪的部分(对我而言),我已经实现了BackHandler事件处理程序,如下所示:

import { BackHandler, Modal, View } from 'react-native';
import { NavigationActions } from 'react-navigation';    
import { HARDWARE_BACK_PRESS } from '../helpers/NavTypes';

constructor(props) {
  super(props);
  this.handleBack = this.handleBack.bind(this);
}

componentWillMount() {
  BackHandler.addEventListener(HARDWARE_BACK_PRESS, this.handleBack);
}

componentWillUnmount() {
  BackHandler.removeEventListener(HARDWARE_BACK_PRESS, this.handleBack);
}

handleBack() {
  const navAction = NavigationActions.back();

  this.props.navigation.dispatch(navAction);
  return true;
}

在我的导航减速器中,我正在处理Navigation/BACK动作类型并跟踪我的状态。现在,当我按下我的Android设备或模拟器上的硬件返回按钮时,我可以看到感谢redux-logger和React Native调试器,导航操作被正确调度并显示先前显示的屏幕,但应用程序仍然关闭。当我将handleBack方法改为这样的事情时,也会发生这种情况:

handleBack() {
  return true;
}

每次按下硬件后退按钮,应用程序仍会关闭。我做了一些步骤调试innode_modules/react-native/Libraries/Utilities/BackHandler.android.js,在RCTDeviceEventEmitter.addListener内部我可以看到我的事件监听器已注册,invokeDefault在循环中设置为trueaddListener退出,但应用程序仍然关闭。有没有人知道是否有一点反应 - 导航和redux覆盖硬件后退按钮的行为在某些顶级我不知道? 我已经设置了第二个没有react-navigation和redux的普通RN项目,实现了相同的BackHandler事件监听器(也返回true),应用程序将不会关闭。所以,现在这让我有点困惑。

javascript android react-native redux react-navigation
2个回答
0
投票

我正在使用react-navigation,我也处理os后退按钮。这对我来说可以。也许你可以尝试一下。请注意,如果您执行除关闭应用程序之外的任何其他任务,则handleBack必须返回true。如果没有,它会立即关闭应用程序。

 componentWillMount() {
  BackHandler.addEventListener(HARDWARE_BACK_PRESS, () => { return this.handleBack.bind(this)() });
}

0
投票

我有同样的问题,返回true不会更新。在更改后再次运行react-native run-android为我解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.