バージョン
- react-native: 0.57.8
- react-navigation: 2.11.2
ドキュメント
概要
遷移上、前の画面へ戻れないようにしたい、という場合、下記の制御が必要
今回は、 2.ハードウェアバックボタンで戻れないようにする の方法についてメモする
ハードウェアバックボタンで戻れないようにする方法
- BackHandler で Android の ハードウェアバックボタン の制御が出来る
サンプル
import {BackHandler} from "react-native"; export default class TestScreen extends React.Component<Props, State> { private backHandler = null; componentDidMount() { if (isAndroid) { if (this.backHandler) { this.backHandler.remove() } // ハードウェアバックボタンで前の画面に戻れなくする this.backHandler = BackHandler.addEventListener('hardwareBackPress', () => true); } } componentWillUnmount() { if (isAndroid) { if (isAndroid && this.backHandler) { this.backHandler.remove() } } }
ただし、これだと、BackHandler.addEventListener
した画面をアンマウントする際に制御を解除するので、
画面がマウントされている間は他の画面でもハードウェアバックできなくなってしまった。
そこで、下記のようにして、BackHandler.addEventListener
した画面がフォーカスされている場合のみハードウェアバックを制御するようにした。
import {BackHandler} from "react-native"; export default class TestScreen extends React.Component<Props, State> { private backHandler = null; componentDidMount() { if (isAndroid) { if (this.backHandler) { this.backHandler.remove() } this.backHandler = BackHandler.addEventListener('hardwareBackPress', () => { // TestScreen がフォーカスされている場合のみ、ハードウェアバック不可にする if (this.props.navigation.isFocused()) { return true; } return false; }); } } componentWillUnmount() { if (isAndroid) { if (isAndroid && this.backHandler) { this.backHandler.remove() } } }
もっとスマートな方法があればご教示頂けると嬉しいです。