Szukaj…


Naciśnij przycisk Wstecz Wykryj sprzęt w systemie Android

BackAndroid.addEventListener('hardwareBackPress', function() {
    if (!this.onMainScreen()) {
        this.goBack();
        return true;
    }
    return false;
});

Uwaga: this.onMainScreen() i this.goBack() nie są funkcjami wbudowanymi, należy je również zaimplementować. ( https://github.com/immidi/react-native/commit/ed7e0fb31d842c63e8b8dc77ce795fac86e0f712)

Przykład BackAndroid wraz z Navigatorem

To jest przykład użycia BackAndroid React Native razem z Navigator .

componentWillMount rejestruje detektor zdarzeń do obsługi dotknięć przycisku Wstecz. Sprawdza, czy na stosie historii znajduje się inny widok, a jeśli taki istnieje, wraca - w przeciwnym razie zachowuje zachowanie domyślne.

Więcej informacji na temat dokumentów BackAndroid i 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} />
        } />
    );
  }
};

Przykład sprzętowego wykrywania przycisku Wstecz za pomocą BackHandler

Ponieważ BackAndroid jest przestarzały. Użyj BackHandler zamiast BackAndroid.

import { BackHandler } from 'react-native';

{...}
  ComponentWillMount(){
    BackHandler.addEventListener('hardwareBackPress',()=>{   
      if (!this.onMainScreen()) {
        this.goBack();
        return true;
      }
      return false;
    });
  }    

Sprzętowa obsługa przycisku Wstecz za pomocą BackHandler i właściwości nawigacji (bez użycia przestarzałego BackAndroida i przestarzałego Nawigatora)

Ten przykład pokazuje nawigację wstecz, która jest oczekiwana na ogół w większości przepływów. Będziesz musiał dodać następujący kod do każdego ekranu w zależności od oczekiwanego zachowania. Istnieją 2 przypadki:

  1. Jeśli na stosie znajduje się więcej niż 1 ekran, przycisk powrotu urządzenia pokaże poprzedni ekran.
  2. Jeśli na stosie jest tylko 1 ekran, przycisk powrotu urządzenia zamknie aplikację.

Przypadek 1: Pokaż poprzedni ekran

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;
}

Ważne: Nie zapomnij powiązać metody w konstruktorze i usunąć detektor w module componentWillUnmount.

Przypadek 2: zamknij aplikację

W takim przypadku nie trzeba obsługiwać niczego na tym ekranie, na którym chcesz zamknąć aplikację.

Ważne: powinien to być ekran na stosie.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow