TypeError:android.widget.Button {1e209aa1VFED ... C。 ........}在无效的视图实例中

时间:2018-12-23 21:27:42

标签: nativescript

我正在尝试直接在nativescript中使用本地代码。将javascript中创建的android.widget.Button代理添加到StackLayout(在nativescript中预定义)时出现此错误

  

“主”线程上发生未捕获的异常。   com.tns.NativeScriptException:调用js方法   onViewAttachedToWindow失败

     

错误:android.widget.Button {1e209aa2 VFED..C。 ......一世。 0,0-0,0}是   不是有效的View实例。文件:   “ file:///data/data/org.nativescript.Tekmo/files/app/tns_modules/tns-core-modules/ui/core/view-base/view-base.js,   行:414,列:12

     

StackTrace:框架:函数:'ViewBase._addView',   文件:“ file:///data/data/org.nativescript.Tekmo/files/app/tns_modules/tns-core-modules/ui/core/view-base/view-base.js”,   行:414,列:19框架:功能:'LayoutBaseCommon.addChild',   文件:“ file:///data/data/org.nativescript.Tekmo/files/app/tns_modules/tns-core-modules/ui/layouts/layout-base-common.js”,   行:44,列:14框架:函数:'onNavigatingTo',   文件:“ file:///data/data/org.nativescript.Tekmo/files/app/main-page.js”,   行:15,列:12框架:函数:'Observable.notify',   文件:“ file:///data/data/org.nativescript.Tekmo/files/app/tns_modules/tns-core-modules/data/observable/observable.js”,   行:110,列:23框架:函数:“ PageBase.onNavigatingTo”,   文件:“ file:///data/data/org.nativescript.Tekmo/files/app/tns_modules/tns-core-modules/ui/page/page-common.js”,   行:107,列:14框架:函数:“ FrameBase._onNavigatingTo”,   文件:“ file:///data/data/org.nativescript.Tekmo/files/app/tns_modules/tns-core-modules/ui/frame/frame-common.js”,   行:276,列:37框架:功能:'FrameBase.performNavigation',   文件:“ file:///data/data/org.nativescript.Tekmo/files/app/tns_modules/tns-core-modules/ui/frame/frame-common.js”,   行:248,列:14框架:   函数:“ FrameBase._processNextNavigationEntry”,   文件:“ file:///data/data/org.nativescript.Tekmo/files/app/tns_modules/tns-core-modules/ui/frame/frame-common.js”,   行:241,列:22框架:   函数:“ Frame._processNextNavigationEntry”,   文件:“ file:///data/data/org.nativescript.Tekmo/files/app/tns_modules/tns-core-modules/ui/frame/frame.js”,   行:143,列:58框架:功能:'Frame._onAttachedToWindow',   文件:“ file:///data/data/org.nativescript.Tekmo/files/app/tns_modules/tns-core-modules/ui/frame/frame.js”,   行:118,列:14框架:   函数:“ AttachListener.onViewAttachedToWindow”,   文件:“ file:///data/data/org.nativescript.Tekmo/files/app/tns_modules/tns-core-modules/ui/frame/frame.js”,   行:35,列:27

     

位于com.tns.Runtime.callJSMethodNative(本地方法)处   com.tns.Runtime.dispatchCallJSMethodNative(Runtime.java:1120)位于   com.tns.Runtime.callJSMethodImpl(Runtime.java:1000)在   com.tns.Runtime.callJSMethod(Runtime.java:987)位于   com.tns.Runtime.callJSMethod(Runtime.java:967)位于   com.tns.Runtime.callJSMethod(Runtime.java:959)位于   com.tns.gen.java.lang.Object_frame_29_36_AttachListener.onViewAttachedToWindow(Object_frame_29_36_AttachListener.java:17)     在android.view.View.dispatchAttachedToWindow(View.java:14835)处   android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2989)     在   android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2997)     在   android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2997)     在   android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2997)     在   android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2997)     在   android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2997)     在   android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1573)     在android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1314)在   android.view.ViewRootImpl $ TraversalRunnable.run(ViewRootImpl.java:7057)     在   android.view.Choreographer $ CallbackRecord.run(Choreographer.java:829)     在android.view.Choreographer.doCallbacks(Choreographer.java:606)处   android.view.Choreographer.doFrame(Choreographer.java:576)在   android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:815)     在android.os.Handler.handleCallback(Handler.java:739)处   android.os.Handler.dispatchMessage(Handler.java:95)在   android.os.Looper.loop(Looper.java:145)在   android.app.ActivityThread.main(ActivityThread.java:6934)位于   java.lang.reflect.Method.invoke(本机方法)位于   java.lang.reflect.Method.invoke(Method.java:372)在   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1404)     在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

var createViewModel = require("./main-view-model").createViewModel;

var application = require("application");
const toast = android.widget.Toast
var context = application.android.context

function onNavigatingTo(args) {
    var page = args.object;
    page.bindingContext = createViewModel();

    var button = new android.widget.Button(context);
    var text = "My Button"; // JavaScript string
    button.setText(text);

    var parent=page.getViewById("parent")
    parent.addChild(button)
}

1 个答案:

答案 0 :(得分:0)

NativeScript具有一个Button组件,您可以直接使用。如果您想访问Button的任何本机属性,然后只需在{N}按钮上访问.nativeView,就可以在{n}按钮上加载android.widget.Button并在iOS上的Android / UIButton上运行时返回.addChild。 / p>

@Filelist = `ls -t`; $NewestFile = $Filelist[0]; 除了基于{N}视图层次结构构建的组件外,如果您想向UI添加本机元素,则可以使用PlaceHolder