さて、私は複数の画面を持つreact-native
アプリを持っています。各画面には、戻るボタンが配置されている上部バーがあります。主な動作は、このボタンを押すとアプリがメイン画面に戻ることです。私がしたいのは、この動作をハードウェアの戻るボタンにコピーすることです(今度はハードウェアの戻るボタンを押して、アプリが閉じます)、これを行うにはどうすればよいですか?
更新:
react-navigation
とredux
を使用しています
あなたはできる:
BackHandler.addEventListener('hardwareBackPress', this.handleBackButton);
に追加しますhandleBackButton(){ this.props.navigation.popToTop(); return true; }
popToTopは、スタックの最初の画面に戻ります。
Reduxでreact-navigationを使用している場合は、ディスパッチするアクションとしてpopToTopを実装する必要があります。
したがって、react-navigation
とredux
については、 docs-Androidのハードウェア戻るボタンの処理 をご覧ください。
YourComponent.js:
import React from "react";
import { BackHandler } from "react-native";
import { NavigationActions } from "react-navigation";
/* your other setup code here! this is not a runnable snippet */
class ReduxNavigation extends React.Component {
componentDidMount() {
BackHandler.addEventListener("hardwareBackPress", this.onBackPress);
}
componentWillUnmount() {
BackHandler.removeEventListener("hardwareBackPress", this.onBackPress);
}
onBackPress = () => {
const { dispatch, nav } = this.props;
if (nav.index === 0) {
return false;
}
dispatch(NavigationActions.back());
return true;
};
render() {
/* more setup code here! this is not a runnable snippet */
return <AppNavigator navigation={navigation} />;
}
}
以下の例でそれを行うことができます
import { BackHandler } from 'react-native';
class App extends Component {
constructor(props){
super(props);
this.backButtonClick = this.backButtonClick.bind(this);
}
componentWillMount() {
BackHandler.addEventListener('hardwareBackPress', this.backButtonClick);
}
componentWillUnmount(){
BackHandler.removeEventListener('hardwareBackPress', this.backButtonClick);
}
backButtonClick(){
if(this.props.navigation && this.props.navigation.goBack){
this.props.navigation.goBack(null);
return true;
}
return false;
}
}
このパッケージをインポート
import { BackHandler } from "react-native";
コンストラクターで関数をバインドする
this.exitApp = this.exitApp.bind(this);
戻るボタン
<Button transparent onPress={this.exitApp}>
<Icon name="arrow-back" />
</Button>
バックプレスを処理してアプリを閉じます
exitApp() {
BackHandler.exitApp()
}
// Add the listener when the page is ready
componentDidMount() {
BackHandler.addEventListener('hardwareBackPress', this.exitApp);
}
// Remove the listener before removing
componentWillUnmount() {
BackHandler.removeEventListener('hardwareBackPress', this.exitApp);
}
ボタンの表示方法は異なる場合がありますが、これは機能します!何か問題があればコメントに書いてください。