2016-10-20 119 views
11

我想阻止用户回到上一个屏幕。所以我添加了代码,但这不起作用。有没有解决方案?弹出警报,但“返回false”不起作用。防止React Native的硬件后退按钮

componentDidMount() { 
    BackAndroid.addEventListener('hardwareBackPress',() => { 
    Alert.alert("alert","alert") 

     this.props.navigator.pop(); 

     return false; 
    }); 
+1

问题的背景很少。请通过[如何提问](http://stackoverflow.com/help/how-to-ask)部分并改进您的帖子。谢谢。 –

+0

尝试删除'this.props.navigator.pop();' – vinayr

回答

1

硬件后退按钮的onclick OnBackPressed回调函数被调用

你可以删除超级申报onBackPressed回电。

@Override 
    public void onBackPressed() { 

    } 
20

您需要还真,如果要禁用默认后退按钮行为。

这是一个示例组件,它将阻止用户返回到上一个屏幕。

import React, {Component,} from 'react'; 
import { 
    View, 
    Text, 
    BackHandler, 
    ToastAndroid, 
} from 'react-native'; 

class BackButtonDemo extends Component { 
    componentDidMount() { 
     BackHandler.addEventListener('hardwareBackPress', this.handleBackButton); 
    } 

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

    handleBackButton() { 
     ToastAndroid.show('Back button is pressed', ToastAndroid.SHORT); 
     return true; 
    } 

    render() { 
     return (
      <View> 
       <Text>Back button example</Text> 
      </View> 
     ); 
    } 
} 

module.exports = BackButtonDemo; 

注: 同时删除 'this.props.navigator.pop();'从你的解决方案。导航器弹出功能将使用户进入由导航器呈现的前一个屏幕。

+0

这对我有效!感谢您的解决方案。 –

+0

不客气。如果您将答案标记为已接受,将会有所帮助:) – Jickson

+1

为我工作。谢谢。 – udai

6

我在App.js添加此代码禁用整个应用程序我的后退按钮(机器人)

componentDidMount() { 
    BackAndroid.addEventListener('hardwareBackPress', this.handleBackButton); 
} 

componentWillUnmount() { 
    BackAndroid.removeEventListener('hardwareBackPress', this.handleBackButton); 
} 

handleBackButton() { 
    return true; 
} 

不要忘记导入BackAndroid

import {BackAndroid} from 'react-native' 
3

如果您正在使用反应-natigation比需要使用BackHandler代替BackAndroid

import { BackHandler } from 'react-native'; 

// code 

componentDidMount() { 
    BackHandler.addEventListener('backPress'); 
} 

// some more code 

componentWillUnmount() { 
    BackHandler.removeEventListener('backPress'); 
} 
+0

是的,BackHandler,因为BackAndroid已弃用 – pico34

3

由刚刚返回true

import {BackAndroid} from 'react-native'; 

componentWillMount() { 
    BackAndroid.addEventListener('hardwareBackPress',() => {return true}); 
} 
1

试试这个禁用后退按钮就使用时反应导航给你一个完整的答案:

如果你使用的反应导航,请将以下您的RootNavigation类不是App.js为了禁用整个应用程序的后退按钮。

import { BackHandler } from 'react-native'; 

componentDidMount() { 
    BackHandler.addEventListener('hardwareBackPress', this.onBackButtonPressed); 
} 

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

onBackButtonPressed() { 
    return true; 
}