2017-09-27 32 views
1

我正在使用redux v5.0.5react-navigation v1.0.0-beta.11来构建一个应用程序,使用react-native v0.44.0。路由使用嵌套的导航器,一个主要的StackNavigator和DrawerNavigator完成。
我正在处理导航缩减器中的所有导航事件,也使用BackHandler在Android上按下硬件。现在到了怪异的一部分(对我来说),我已经实现了BackHandler事件处理程序,如下所示:React-Native BackHandler总是关闭Android中的应用程序(硬件背面)

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; 
} 

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

+0

我也面临同样的问题,它为你工作? –

+0

@ Anjana-Systematix在这个项目中,我们更新了一个更新的'react-native','redux'和'react-navigation'版本,现在一切正常。但是我已经创建了该项目的一个分支,其中存在问题仍然存在的旧模块,就我的业余时间而言,我试图弄清楚该实现有什么问题。 – nils

+0

我的问题通过解决方案给出的解决方案https://github.com/facebook/react-native/issues/15497由Victoriayangx –

回答

0

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

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

嗨@csath,谢谢你的回答。但是这并没有改变任何东西。正如我所说,我甚至可以改变'handleBack'总是返回'true',应用程序仍然会关闭。我不知道我可以在哪里找到更深入探索问题的过程。现在我正在阅读adb logcat日志,看看是否有任何暗示“超越”硬件背压的提示。 – nils

0

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