我正在为Roku编写一个应用程序,我需要使用键盘输入一些文本并获取main.brs中的文本
我从这里给出的KeyboardExample开始:https://sdkdocs.roku.com/display/sdkdoc/Widgets+Markup(键盘标记)。
要将文本传递给main.brs,我使用了roSGScreen的全局节点,如下面的链接所示。 https://sdkdocs.roku.com/display/sdkdoc/Scene+Graph+Data+Scoping(全球范围)。
以下代码出现在我的main.brs
中Sub getTextFromUser()
screen = CreateObject("roSGScreen")
m.textPort = CreateObject("roMessagePort")
screen.setMessagePort(m.textPort)
m.global = screen.getGlobalNode()
m.global.id = "GlobalNode"
m.global.addFields( {myText: "Not initialized"} )
scene = screen.CreateScene("KeyboardExample")
screen.show()
while(true)
msg = wait(0, m.textPort)
msgType = type(msg)
if msgType = "roSGScreenEvent"
if msg.isScreenClosed()
myURL = m.global.myText
return
end if
end if
end while
End Sub
我在keyboard.xml中添加了以下代码
function onKeyEvent(key as String, press as Boolean) as Boolean
keyboard = m.top.findNode("exampleKeyboard")
if keyboard.text <> invalid
m.global.myText= keyboard.text
end if
return false
end function
当我收到 roSGScreenEvent.isScreenClosed 事件时,我正在将 m.global.myText 复制到本地变量。
问题是当 roSGScreenEvent.isScreenClosed 被接收时 m.global.myText 变为无效。
有人可以告诉我这里出了什么问题吗?
更新 我在以下链接中阅读了 roSGNode.ObserveField 。 https://sdkdocs.roku.com/display/sdkdoc/Handling+Node+Field+Changes
我为&#34; text &#34;添加了观察者键盘的字段如下。
keyboard.ObserveField("text", "changetext")
每当按下一个键时,我都会收到changetext()回调。但是这种方法也存在同样的问题。
根据上面的链接,可以将 roMessagePort 对象传递给函数指针的观察者instread。所以我使用 global 变量将 textPort 传递给 keyboard.xml ,并将其传递给observer,如下所示。
keyboard.ObserveField("text", m.global.myTextPort)
我的期望是每当按下一个键时,在 textPort 上获取 roSGNodeEvent 。但我没有得到任何事件。
答案 0 :(得分:0)
全局节点在一个Rosgscreen的节点之间共享,如果屏幕关闭,则无法访问它的字段。因此,每次输入文本时,您都必须观察键盘文本并更新局部变量myurl。