我正在尝试直接在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)
}
答案 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。