这只是我的登录屏幕:
''''''''''''''''''''''''''''''''''''''''''''' ''''
用户名: TextBox1
密码:: TextBox2
保存 设置
''''''''''''''''''''''''''''''''''''''''''''' ''''
我单击“设置按钮”以打开设置URL屏幕,在这里:
''''''''''''''''''''''''''''''
URL: TextBox3
保存
''''''''''''''''''''''''''''''
我在设置URL屏幕中写入设置URL,然后单击“保存”按钮。现在保存设置URL后,我想再次导航回登录屏幕。我将所有三个凭证都存储在roRegistrySection中。这是一家成功的商店。但是,登录屏幕和设置URL屏幕之间的导航无法正常工作。当我单击保存按钮时,它将打开主屏幕。任何人都知道如何在两个屏幕之间导航。
预期结果:,请按照以下步骤操作。
首先,我单击“设置”按钮以在文本框中输入URL。再次单击保存按钮后,导航回到登录屏幕。
在登录屏幕中,我有两个文本框。输入用户名和密码后,我单击“保存”按钮,然后使用roRegistrySection中的三个值存储重定向到主页。
任何人都知道问题所在。
答案 0 :(得分:0)
选中此getting-started-with-brightscript-screen-navigation
实现简单的导航菜单 以下屏幕截图显示了许多Roku频道的典型登录页面。列表屏幕组件是实现简单菜单的一种常用方法,这些菜单可以驱动频道内容的导航。每个列表项可以代表一种视频流派,一种音乐风格,一组设置,或者您想要在频道中分组的任何其他内容类别。在典型的频道中,选择列表项后,频道会导航到新屏幕。在我们的示例中,列表屏幕允许用户以假设的晚餐浏览早餐和午餐菜单。选择其中一项会弹出特定餐类产品的详细列表。
选择列表项时导航到新屏幕的关键是处理列表屏幕的isListItemSelected事件。 msg.GetIndex()返回的索引包含所选列表项的从零开始的索引。您的频道可以将每个列表项索引映射到一个唯一的屏幕,并响应isListItemSelected事件导航到该屏幕。有两种方法可以完成此操作。最简单的方法是在调用屏幕的事件循环中使用if语句方法来测试所选索引并调用正确的函数:
while (true)
msg = wait(0, port)
if (type(msg) = "roListScreenEvent")
if (msg.isListItemSelected())
index = msg.GetIndex()
if (index = 0)
ShowBreakfastMenu()
else if (index = 1)
ShowLunchMenu()
…
endif
endif
endif
end while
另一种更复杂但更简洁的方法是创建函数引用数组。
menuFunctions = [ShowBreakfastMenu, ShowLunchMenu,…]
while (true)
msg = wait(0, port)
if (type(msg) = "roListScreenEvent")
if (msg.isListItemSelected())
menuFunctions[msg.GetIndex()]() ‘Call function based on index
endif
endif
end while
了解此代码的工作原理的关键在于BrightScript函数参考概念。函数引用只是给定函数的名称。可以将函数引用分配给变量,用作数组元素,甚至可以传递给其他函数。可以通过使用函数调用运算符“()”来调用与函数引用相对应的函数。以下是通过引用调用名为doSomething的函数的一些示例:
Function doSomething() as void
...
End Function
doSomethingReference = doSomething
‘Call doSomething by reference
doSomethingReference()
references = [doSomething, …]
‘我们还可以将函数引用放入数组中 reference0'通过数组元素函数引用调用doSomething 考虑到这一点,让我们回到在列表视图屏幕中实现菜单的第二种方法。数组menuFunctions包含每个频道的屏幕创建功能的名称。它们的顺序与它们在关联的列表屏幕中对应的列表项的顺序相同。然后,当在列表屏幕的事件循环中处理isListItemSelected事件时,我们从menuFunctions数组中获取相应的函数名称。然后在正确的数组元素上使用“()”运算符通过引用调用该函数:
menuFunctions[msg.GetIndex()]()
’基于索引的调用功能
在示例通道中,我们使用函数引用方法。要查看菜单项的实际功能,请单击“早餐”菜单项,您将在一个简单的海报屏幕中看到详细的早餐菜单:
单击“午餐”菜单项将显示详细的午餐菜单,该菜单通过网格屏幕实现:
深度导航 到目前为止,我们已经研究了如何使用列表屏幕将简单的类别导航构建到频道中。从上面的海报屏幕或网格屏幕等屏幕移动到频道中的其他屏幕也很容易。只需处理屏幕事件循环中的isListItemSelected事件,即可检测何时选择了某个项目并做出适当的响应。
在示例频道中,您可以单击早餐菜单海报屏幕中的任何项目,以显示详细信息屏幕,其中包含有关所选项目的更多信息。此屏幕的示例(也称为“跳板”屏幕)如下所示:
此屏幕右侧的两个按钮演示了另一种BrightScript导航技术。选择这些按钮之一后,详细信息屏幕将接收一个isButtonPressed事件。与事件一起发送的消息包含所选按钮的索引。与列表,海报和网格屏幕项目索引一样,此按钮索引可用于控制频道对按钮按下做出的响应,包括导航到新屏幕,打开对话框和其他操作。
while (true)
msg = wait(0, port)
if (type(msg) = "roSpringboardScreenEvent")
if (msg.isButtonPressed())
buttonIndex = msg.GetIndex()
'Open a new screen corresponding to the button index
…
endif
endif
end while
要尽量减少样本频道下载的大小,只有早餐和午餐列表屏幕项目会打开海报或网格屏幕。此外,只能单击早餐菜单海报屏幕项目以打开详细信息屏幕。您可以轻松地将这两个类别用作指导,以自行完成频道。或者,您可以直接使用代码来开始在自己的频道中导航。编码愉快!