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

问题描述 投票:1回答:3

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

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

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

react-native react-native-android
3个回答
0
投票

根据react-native-router-flux documentation,可以将事件处理程序添加到按钮中。你可以使用onExitonLeftonRight。就像是:

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

0
投票

我能够在react-native-router-flux的onEnter和onExit道具的帮助下完成它


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;
© www.soinside.com 2019 - 2024. All rights reserved.