如何在React Native中将Android应用程序返回到上一个活动?

6

如何在react-native中为Android设置返回上一个活动?

我的想法是:

1. 在index.android.js中设置_navigate变量

// 设置回退的堆栈
var _navigator;
BackAndroid.addEventListener('hardwareBackPress', function() {
    if (_navigator && _navigator.getCurrentRoutes().length > 1) {
        _navigator.pop();
        return true;
    }
    return false;
});

在RouteMapping中实现2次导航:

RouteMapper: function(route, navigationOperations, onComponentRef) {
        _navigator = navigationOperations;
        if (route.name === 'detail') {
            // 问题详情页
            return (
                <DetailScreen
                  navigator={navigationOperations}
                  question={route.question} />
            );
        } else if (route.name == 'front') {
            // 首页
            return(
              <FrontScreen
                navigator={navigationOperations}
                />
            );

        }
    },

在列表视图中添加3个推入

gotoDetail: function(question: Object) {
    this.props.navigator.push({
        id: question.question_id,
        name: 'detail',
        question: question
    })

但是它不起作用。当我在Android中点击返回按钮时,它会跳出应用程序?
我该怎么做?
还是有人可以给一些例子吗?
1个回答

3
您需要将以下代码添加到<您的项目>/android/app/src/main/java/com/<您的项目>/MainActivity.java文件中:
@Override
public void onBackPressed() {
    if (mReactInstanceManager != null) {
        mReactInstanceManager.onBackPressed();
    } else {
        super.onBackPressed();
    }
}

使用React Native 0.12创建的项目将会正常运行。

更多信息请参见Github上的此问题https://github.com/facebook/react-native/issues/3223


我发现了一些小问题:即使你更新了react-native的npm版本,你仍然需要运行init或手动更新MainActivity。这需要部署到设备上,JS的自动更新不会捕捉到这个变化。 - ooolala
我添加了这段代码,现在我的项目无法运行,我应该在添加后在终端中运行npm命令吗?谢谢。 - Adam Katz
@Stefan Klasen您好,我添加了这段代码后为什么会出现“ReactInstanceManager在ReactActivity中具有私有访问权限”的错误? - IntoTheDeep
你在哪里声明 mReactInstanceManager - Daniel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接