React Native Android BackHandler Выход из приложения - PullRequest
0 голосов
/ 10 сентября 2018

Я хочу реализовать BackHandler для запуска на одном компоненте и сохранить поведение по умолчанию аппаратной кнопки возврата «перейти к предыдущему экрану» в остальной части моего приложения, у меня есть компонент с именем «case.js», который я хочу для выхода из приложения, если пользователь нажал кнопку «Назад», когда этот компонент находится на экране, и для перехода назад, если пользователь находится на каком-либо другом компоненте, экран дел находится над экраном «Вход».

Вот то, что я пробовал в файле case.js:

  componentDidMount = async () => {

    await BackHandler.addEventListener('hardwareBackPress', this._closeApp())

  }

  componentWillUnmount = async () => {

    await BackHandler.removeEventListener('hardwareBackPress', this_closeApp());

  }

  _closeApp = async () => {

    BackHandler.exitApp();

  }

но приложение сразу закрывается.

Как мне этого достичь?

Ответы [ 3 ]

0 голосов
/ 10 сентября 2018
componentWillMount() {
    BackHandler.addEventListener('hardwareBackPress', this.handleBackButton);
}

componentWillUnmount() {
    BackHandler.removeEventListener('hardwareBackPress', this.handleBackButton);
}

handleBackButton = () => {
    //add your code

    return true;
};
0 голосов
/ 27 сентября 2018

Поскольку я пока не могу добавлять комментарии - добавлю к ответу Махди Баширпура, что правильно:

componentWillMount() {
    BackHandler.addEventListener('hardwareBackPress', this.handleBackButton);
}

componentWillUnmount() {
    BackHandler.removeEventListener('hardwareBackPress', this.handleBackButton);
}

handleBackButton = () => {
    //add your code

    return true;
};

Этот код будет работать, но, как вы заметили, после добавления EventListener на экран входа в систему он будет влиять на все остальные экраны в стеке, которые не перезаписывают BackHandler EventListener.

Лучший способ решить эту проблему - добавить еще одно условие, которое проверяет, что вы находитесь на экране входа в систему:

handleBackButton = () => {
    if (screen == 'Login') {
    BackHandler.exitApp();
    return true;
    }
};

Как проверить, на каком экране вы находитесь? Предполагая, что вы используете React-Navigation, посмотрите здесь . Если у вас возникли проблемы с отслеживанием текущего экрана, я предлагаю открыть новую тему.

0 голосов
/ 10 сентября 2018

Добавить return true; к _closeApp методу

_closeApp = async () => {

    // BackHandler.exitApp();

    return true;
}

Эта ссылка может вам очень помочь: Реагировать в собственном режиме: Двойное нажатие для выхода из приложения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...