簡體   English   中英

React-Native BackHandler始終在Android中關閉App(硬件返回)

[英]React-Native BackHandler always closes App in Android (hardware back)

我正在使用redux v5.0.5react-navigation v1.0.0-beta.11構建帶有react-native v0.44.0的應用程序。 路由是通過嵌套的導航器,一個主StackNavigator和DrawerNavigator完成的。
我正在處理導航歸約器中的所有導航事件,還使用BackHandler在Android上對硬件進行了反推。 現在是怪異的部分(對我而言),我已經實現了BackHandler事件處理程序,如下所示:

import { BackHandler, Modal, View } from 'react-native';
import { NavigationActions } from 'react-navigation';    
import { HARDWARE_BACK_PRESS } from '../helpers/NavTypes';

constructor(props) {
  super(props);
  this.handleBack = this.handleBack.bind(this);
}

componentWillMount() {
  BackHandler.addEventListener(HARDWARE_BACK_PRESS, this.handleBack);
}

componentWillUnmount() {
  BackHandler.removeEventListener(HARDWARE_BACK_PRESS, this.handleBack);
}

handleBack() {
  const navAction = NavigationActions.back();

  this.props.navigation.dispatch(navAction);
  return true;
}

在我的Navigation Reducer中,我正在處理Navigation/BACK動作類型並跟蹤我的狀態。 現在,當我在Android設備或仿真器上按下硬件后退按鈕時,由於redux-logger和React Native調試器,我可以看到導航操作已正確分派,並且出現了上一個顯示的屏幕,但是該應用程序無論如何關閉。 當我將handleBack方法更改為handleBack時,也會發生這種情況:

handleBack() {
  return true;
}

每次按下硬件后退按鈕,應用程序仍然關閉。 我做了一些步調試node_modules/react-native/Libraries/Utilities/BackHandler.android.js ,里面RCTDeviceEventEmitter.addListener我可以看到我的事件偵聽器進行注冊和invokeDefault設置為true在循環。 addListener已退出,但該應用程序仍關閉。 有誰知道反應和導航是否有某種意義覆蓋了我不知道的某個頂級硬件后退按鈕的行為?
我已經設置了第二個沒有react-navigation和redux的普通RN項目,實現了相同的BackHandler事件偵聽器(也返回true),並且該應用程序不會關閉。 所以,現在這讓我有些困惑。

我正在使用react-navigation,並且還處理了os back按鈕。 這對我來說可以。 也許您可以嘗試一下。 請注意,如果您執行除關閉應用程序以外的任何其他任務,handleBack必須返回true。 如果沒有,它將立即關閉該應用程序。

 componentWillMount() {
  BackHandler.addEventListener(HARDWARE_BACK_PRESS, () => { return this.handleBack.bind(this)() });
}

我有同樣的問題,返回true不會更新。 所做的更改為我解決了問題后,再次運行react-native run-android

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM