react-native
Android - Botón Atrás de Hardware
Buscar..
Detecta pulsaciones del botón Atrás del hardware en Android
BackAndroid.addEventListener('hardwareBackPress', function() {
if (!this.onMainScreen()) {
this.goBack();
return true;
}
return false;
});
Nota: this.onMainScreen()
y this.goBack()
no están integradas en funciones, también debe implementarlas. ( https://github.com/immidi/react-native/commit/ed7e0fb31d842c63e8b8dc77ce795fac86e0f712)
Ejemplo de BackAndroid junto con Navigator
Este es un ejemplo de cómo usar el BackAndroid
React Native junto con el Navigator
.
componentWillMount
registra un detector de eventos para manejar los toques en el botón Atrás. Comprueba si hay otra vista en la pila de historial, y si la hay, retrocede; de lo contrario, mantiene el comportamiento predeterminado.
Más información sobre la documentación de BackAndroid
y la documentación de Navigator
.
import React, { Component } from 'react'; // eslint-disable-line no-unused-vars
import {
BackAndroid,
Navigator,
} from 'react-native';
import SceneContainer from './Navigation/SceneContainer';
import RouteMapper from './Navigation/RouteMapper';
export default class AppContainer extends Component {
constructor(props) {
super(props);
this.navigator;
}
componentWillMount() {
BackAndroid.addEventListener('hardwareBackPress', () => {
if (this.navigator && this.navigator.getCurrentRoutes().length > 1) {
this.navigator.pop();
return true;
}
return false;
});
}
renderScene(route, navigator) {
this.navigator = navigator;
return (
<SceneContainer
title={route.title}
route={route}
navigator={navigator}
onBack={() => {
if (route.index > 0) {
navigator.pop();
}
}}
{...this.props} />
);
}
render() {
return (
<Navigator
initialRoute={<View />}
renderScene={this.renderScene.bind(this)}
navigationBar={
<Navigator.NavigationBar
style={{backgroundColor: 'gray'}}
routeMapper={RouteMapper} />
} />
);
}
};
Ejemplo de detección de botón de retroceso de hardware utilizando BackHandler
Desde BackAndroid está en desuso. Utilice BackHandler en lugar de BackAndroid.
import { BackHandler } from 'react-native';
{...}
ComponentWillMount(){
BackHandler.addEventListener('hardwareBackPress',()=>{
if (!this.onMainScreen()) {
this.goBack();
return true;
}
return false;
});
}
Manejo del botón de retroceso del hardware usando BackHandler y propiedades de navegación (sin usar BackAndroid y Navigator en desuso)
Este ejemplo le mostrará la navegación anterior que se espera generalmente en la mayoría de los flujos. Deberá agregar el siguiente código a cada pantalla dependiendo del comportamiento esperado. Hay 2 casos:
- Si hay más de 1 pantalla en la pila, el botón de retroceso del dispositivo mostrará la pantalla anterior.
- Si solo hay 1 pantalla en la pila, el botón de retroceso del dispositivo saldrá de la aplicación.
Caso 1: Mostrar pantalla anterior
import { BackHandler } from 'react-native';
constructor(props) {
super(props)
this.handleBackButtonClick = this.handleBackButtonClick.bind(this);
}
componentWillMount() {
BackHandler.addEventListener('hardwareBackPress', this.handleBackButtonClick);
}
componentWillUnmount() {
BackHandler.removeEventListener('hardwareBackPress', this.handleBackButtonClick);
}
handleBackButtonClick() {
this.props.navigation.goBack(null);
return true;
}
Importante: No olvide enlazar el método en el constructor y eliminar la escucha en componentWillUnmount.
Caso 2: Salir de la aplicación
En este caso, no es necesario manejar nada en esa pantalla en la que desea salir de la aplicación.
Importante: Esto debe ser solo pantalla en la pila.