如何为特定屏幕添加Android Back Handler?

时间:2017-07-28 09:53:54

标签: react-native react-native-android

我有三个屏幕MyVault,Add Doc和Add Repo。从Myvault有一个按钮添加新文档,点击Add Doc将打开。现在在添加文档中如果用户按下“返回”按钮,则我想要弹出确认。我在添加文档屏幕中有一个按钮,打开添加回购屏幕,用户可以选择一个回购,当他们点击添加时,将弹出该屏幕,添加文档屏幕将使用回购数据刷新。如果我在ComponentDidMount中添加一个侦听器,然后在ComponentWillUnmount中删除它,那么问题就是即使我按下Add repo,弹出也会出现。我不希望在任何其他屏幕上弹出,我只想在添加文档。

注意:我正在使用react native router flux进行路由

我也在此链接上发布了此问题:https://github.com/facebook/react-native/issues/15248

3 个答案:

答案 0 :(得分:0)

根据react-native-router-flux documentation,可以将事件处理程序添加到按钮中。您可以使用onExitonLeftonRight。类似的东西:

<Scene 
  key="AddDoc" 
  component={AddDoc}
  onExit={() => console.log('your modal pop up logic')}
/>

答案 1 :(得分:0)

我能够在onEnter和onExit的反馈 - native-router-flux

的道具的帮助下做到这一点

答案 2 :(得分:0)

尝试以下方法

import React from 'react';
import {View, Text, AlertPlatform,BackAndroid} from 'react-native';

class App extends React.Component {

    constructor(props) {
        super(props);
    }


    onBackAndroid = () => {
        backButtonPressedOnceToExit ?  BackAndroid.exitApp() : "";
        backButtonPressedOnceToExit = true;

        setTimeout(() => {backButtonPressedOnceToExit = false;}, 2000);
        return true;
    }

    componentWillMount = () => BackAndroid.addEventListener('hardwareBackPress', this.onBackAndroid.bind(this));

    componentWillUnmount = () => {
        BackAndroid.removeEventListener('hardwareBackPress', this.onBackAndroid.bind(this));
    }


    render() {
        return (
            // Your code
        );
    }
}

export default App;