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 예제
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 및 deprecated Navigator 사용하지 않음)
이 예제는 대부분의 플로우에서 일반적으로 예상되는 뒤로 탐색을 보여줍니다. 예상되는 동작에 따라 다음 코드를 모든 화면에 추가해야합니다. 2 가지 경우가 있습니다 :
- 스택에 두 개 이상의 화면이있는 경우 장치 뒤로 버튼은 이전 화면을 표시합니다.
- 스택에 화면이 하나만있는 경우 기기 뒤로 버튼이 앱을 종료합니다.
사례 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