How do I choose what gets displayed when I start a NativeScript view from an Android app?

我有一个Android应用程序,其中包含一些用Java编写的活动,我在Java应用程序中嵌入了一个带有多个视图的NativeScript应用程序 . 我可以从一个用Java编写的活动中启动NativeScript应用程序,但它始终以默认路由开始 .

一个完整的例子是this GitHub project的so-40870998分支 .

我已经成功地按照说明进行了extend your existing Android app with Angular 2 and NativeScript但是我还没有弄清楚如何在我的应用程序的Java部分中从我的应用程序的NativeScript部分指定当前路径(或任何其他方式来指定最初显示的视图) .


我的NativeScript应用程序使用的是Angular2,TypeScript,并且有一些路由,就像示例杂货应用程序一样 .

在我的Java活动中,我有以下方法:

private void showSpinner() {
    // TODO: This would need to be improved. It just shows something happened when the buttons are tapped.
    spinner.setVisibility(View.VISIBLE);
}

public void showScreen1(View view) {
    showSpinner();

    // TODO: Go to /welcome (currently going to "/" and being redirected)
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            show(MyCustomNativeScriptActivity.class);
        }
    }, 500);
}


public void showScreen2(View view) {
    showSpinner();

    // TODO: Go to /demo
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            show(MyCustomNativeScriptActivity.class);
        }
    }, 500);
}

private <T> void show(Class<T> clazz) {
    com.tns.Runtime runtime = com.tns.RuntimeHelper.initRuntime(getApplication());
    if (runtime != null) {
        runtime.run();

        android.content.Intent intent = new android.content.Intent(MainActivity.this, clazz);
        intent.setAction(android.content.Intent.ACTION_DEFAULT);
        startActivity(intent);
    }
}

我正在使用来自https://github.com/enchev/android-ng2-tns/tree/master/app/src/main/assets/app的MyCustomNativeScriptActivity.js和MyCustomNativeScriptFragment.js

我正在使用来自https://github.com/enchev/android-ng2-tns/tree/master/app/src/main/java/com/example/myexistingapplication的MyCustomNativeScriptActivity.java和MyCustomNativeScriptFragment.java


我尝试在onSart和onResume的JS文件中导航活动,如下所示:

MyCustomNativeScriptActivity.js:

var frame = require("ui/frame");
require("./MyCustomNativeScriptFragment");
var MyCustomNativeScriptActivity = (function (_super) {

...

MyCustomNativeScriptActivity.prototype.onStart = function () {
    this._callbacks.onStart(this, _super.prototype.onStart);
    frame_1.topmost().navigate("/demo");
};

...

    return MyCustomNativeScriptActivity;
}(android.app.Activity));

尝试导航onResume不会做任何事情 .

尝试在onStart中导航会导致此错误:

12-15 14:06:23.024 7297-7297/? W/System.err: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myexistingapplication/com.example.myexistingapplication.MyCustomNativeScriptActivity}: com.tns.NativeScriptException: 
12-15 14:06:23.024 7297-7297/? W/System.err: Calling js method onStart failed
12-15 14:06:23.024 7297-7297/? W/System.err: Error: Failed to load Page from entry.moduleName: /demo
12-15 14:06:23.024 7297-7297/? W/System.err: File: "/data/data/com.example.myexistingapplication/files/app/tns_modules/ui/frame/frame-common.js, line: 92, column: 12
12-15 14:06:23.024 7297-7297/? W/System.err: StackTrace: 
12-15 14:06:23.024 7297-7297/? W/System.err:    Frame: function:'resolvePageFromEntry', file:'/data/data/com.example.myexistingapplication/files/app/tns_modules/ui/frame/frame-common.js', line: 92, column: 19
12-15 14:06:23.025 7297-7297/? W/System.err:    Frame: function:'Frame.navigate', file:'/data/data/com.example.myexistingapplication/files/app/tns_modules/ui/frame/frame-common.js', line: 165, column: 20
12-15 14:06:23.025 7297-7297/? W/System.err:    Frame: function:'MyCustomNativeScriptActivity.onStart', file:'/data/data/com.example.myexistingapplication/files/app/MyCustomNativeScriptActivity.js', line: 21, column: 27
12-15 14:06:23.025 7297-7297/? W/System.err:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
12-15 14:06:23.025 7297-7297/? W/System.err:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
12-15 14:06:23.026 7297-7297/? W/System.err:     at android.app.ActivityThread.-wrap12(ActivityThread.java)
12-15 14:06:23.026 7297-7297/? W/System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
12-15 14:06:23.026 7297-7297/? W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
12-15 14:06:23.026 7297-7297/? W/System.err:     at android.os.Looper.loop(Looper.java:154)
12-15 14:06:23.026 7297-7297/? W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:6077)
12-15 14:06:23.026 7297-7297/? W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
12-15 14:06:23.026 7297-7297/? W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
12-15 14:06:23.026 7297-7297/? W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)