【问题标题】:BackHandler not working properly React NativeBackHandler 无法正常工作 React Native
【发布时间】:2017-09-22 21:58:48
【问题描述】:

当用户在 Android 上按下返回按钮时,我正在尝试返回。

我在屏幕上添加了监听器,它在远程调试模式下接收事件。但是当我不进行远程调试时,它无法正常工作。真的很奇怪。

我将附上我写的代码sn-ps。

//Navigator
const BoardNavigator = StackNavigator({
    Board: { screen: Board }
});

//Board Component
class Board extends Component {
    componentWillMount () {
        BackHandler.addEventListener('hardwareBackPress', this._onBackPressed);
    }

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

    _onBackPressed () {
        console.log('backPress');
        goBack(this.props.navigation);
        return true;
    }

    onNext() {
        this.props.navigation.navigate("Board", {content: ...});
    }
}

附加信息: 这个 BoardNavigator 是 rootNavigator(StackNavigator) 的嵌套之一。

反应:'16.0.0-alpha.12'

反应原生:“0.47.2”

【问题讨论】:

  • 到底出了什么问题?
  • 我认为是 BackHandler 问题。当我在“远程调试模式”中测试它时,后退按钮可以正常工作。但是当我不在“远程调试模式”下测试它时,它会完全关闭应用程序。
  • @CoolEagle 遇到同样的问题。你已经解决了吗?

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


【解决方案1】:

我实际上使用了像下面这样的后处理程序来控制后退按钮,只需按两下即可关闭应用程序。

componentDidMount() {
this._backPress = 0;

BackHandler.addEventListener('backPress', () => {
  setTimeout(() => {
    this._backPress = 0;
  }, 3000);

  this._backPress += 1;
  if (this._backPress <= 1) {
    ToastAndroid.showWithGravity(strings.BACK_BUTTON_ALERT, ToastAndroid.SHORT, ToastAndroid.CENTER);
    return true;
  }
  return false;
});

【讨论】:

  • 但实际上,我的应用程序运行起来非常奇怪。当我在调试模式(远程调试)下运行它时,它与 StackNavigator Back Action 一起工作得很好,但在正常模式下,它不起作用,它正在关闭应用程序而不向 BackHandler 函数发送事件。
猜你喜欢
  • 2021-10-08
  • 2021-10-01
  • 2018-06-13
  • 1970-01-01
  • 1970-01-01
  • 2018-04-19
  • 2017-11-28
  • 2018-06-13
  • 1970-01-01
相关资源
最近更新 更多