react-native
Android - ハードウェア戻るボタン
サーチ…
Androidでハードウェアのバックボタンを押す
BackAndroid.addEventListener('hardwareBackPress', function() {
if (!this.onMainScreen()) {
this.goBack();
return true;
}
return false;
});
注: this.onMainScreen()
およびthis.goBack()
は組み込み関数ではありませんが、それらも実装する必要があります。 ( https://github.com/immidi/react-native/commit/ed7e0fb31d842c63e8b8dc77ce795fac86e0f712)
BackAndroidとNavigatorの例
React NativeのBackAndroid
とNavigator
の使い方の例です。
componentWillMount
は、戻るボタンのタップを処理するイベントリスナーを登録します。ヒストリスタック内に別のビューがあるかどうかをチェックし、存在する場合は元の状態に戻り、それ以外の場合はデフォルトの動作を維持します。
BackAndroid
ドキュメントと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} />
} />
);
}
};
BackHandlerを使用したハードウェアのバックボタン検出の例
BackAndroidは廃止予定です。 BackAndroidではなくBackHandlerを使用します。
import { BackHandler } from 'react-native';
{...}
ComponentWillMount(){
BackHandler.addEventListener('hardwareBackPress',()=>{
if (!this.onMainScreen()) {
this.goBack();
return true;
}
return false;
});
}
BackHandlerとナビゲーションプロパティを使用したハードウェアのバックボタン処理(非推奨のBackAndroidと非推奨のNavigatorを使用しない)
この例では、ほとんどのフローで一般的に予想されるナビゲーションを表示します。予想される動作に応じて、次のコードをすべての画面に追加する必要があります。 2つのケースがあります:
- スタックに複数の画面がある場合、デバイスの戻るボタンは前の画面を表示します。
- スタックに1つの画面しかない場合、デバイス戻るボタンはアプリを終了します。
ケース1:前の画面を表示する
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;
}
重要:コンストラクタでメソッドをバインドし、componentWillUnmountのリスナを削除することを忘れないでください。
ケース2:終了アプリケーション
この場合、アプリを終了する画面上で何も処理する必要はありません。
重要:これはスタック上にのみ表示する必要があります。
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow