react-native
Android - Pulsante Indietro hardware
Ricerca…
Rileva il pulsante Indietro hardware preme in Android
BackAndroid.addEventListener('hardwareBackPress', function() {
if (!this.onMainScreen()) {
this.goBack();
return true;
}
return false;
});
Nota: this.onMainScreen()
e this.goBack()
non sono incorporati in funzioni, è necessario implementarli. ( https://github.com/immidi/react-native/commit/ed7e0fb31d842c63e8b8dc77ce795fac86e0f712)
Esempio di BackAndroid insieme a Navigator
Questo è un esempio su come usare React Native's BackAndroid
insieme al Navigator
.
componentWillMount
registra un listener di eventi per gestire i tocchi sul pulsante Indietro. Controlla se c'è un'altra vista nello stack della cronologia e, se ce n'è una, torna indietro - mantiene il comportamento predefinito.
Ulteriori informazioni sui documenti BackAndroid
e sui documenti di 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} />
} />
);
}
};
Esempio di rilevamento del pulsante back dell'hardware mediante BackHandler
Poiché BackAndroid è deprecato. Usa BackHandler invece di BackAndroid.
import { BackHandler } from 'react-native';
{...}
ComponentWillMount(){
BackHandler.addEventListener('hardwareBackPress',()=>{
if (!this.onMainScreen()) {
this.goBack();
return true;
}
return false;
});
}
Gestione del pulsante back hardware utilizzando BackHandler e Navigation Properties (senza utilizzare BackAndroid obsoleto e Navigator deprecato)
Questo esempio ti mostrerà la navigazione di ritorno che è prevista generalmente nella maggior parte dei flussi. Dovrai aggiungere il seguente codice ad ogni schermata in base al comportamento previsto. Ci sono 2 casi:
- Se ci sono più di 1 schermata sullo stack, il pulsante back del dispositivo mostrerà la schermata precedente.
- Se è presente solo una schermata sullo stack, il pulsante Indietro del dispositivo uscirà dall'app.
Caso 1: mostra la schermata precedente
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: non dimenticare di associare il metodo nel costruttore e rimuovere il listener in componentWillUnmount.
Caso 2: uscita App
In questo caso, non è necessario gestire nulla su quella schermata in cui si desidera uscire dall'app.
Importante: questo dovrebbe essere solo lo schermo in pila.