【问题标题】:Redirect to Home page After Clicked Save button using bright script?使用明亮的脚本单击保存按钮后重定向到主页?
【发布时间】:2019-11-07 06:48:59
【问题描述】:
  1. 我在明亮的脚本中创建了登录屏幕和设置 URL 屏幕,其中凭据用户名、登录屏幕中的密码和设置 URL 屏幕中的设置 URL 以及两个按钮保存和设置。

这里只是我的登录屏幕:

  • 登录屏幕

    '''''''''''''''''''''''''''''''''''''''''''' ''''

    用户名: TextBox1

    密码: TextBox2

    保存 设置

    '''''''''''''''''''''''''''''''''''''''''''' ''''

我点击设置按钮打开设置 URL 屏幕就在这里:

  • 网址屏幕

    '''''''''''''''''''''''''''''''''''

    网址: TextBox3

    保存

    '''''''''''''''''''''''''''''''''''

我在设置 URL 屏幕中写入设置 URL,然后单击保存按钮。现在保存设置 URL 后,我想再次导航回登录屏幕。我将所有三个凭据都存储在 roRegistrySection 中。这是一个成功的存储。但是登录屏幕和设置 URL 屏幕之间的导航无法正常工作。当我单击保存按钮时,它会打开主屏幕。任何人都知道如何在两个屏幕之间导航。

预期结果:按照以下步骤。

  1. 首先,我点击设置按钮在文本框中输入 URL。单击保存按钮后,再次导航回登录屏幕。

  2. 在登录屏幕中,我有两个文本框。输入用户名和密码后,我点击保存按钮,然后重定向到主页,并在 roRegistrySection 中存储三个值。

任何人都知道这个问题。

【问题讨论】:

  • 真的不清楚你在问什么。
  • @JoeT Raxit Pandya 编辑我的帖子请检查。
  • 我需要查看您的代码,但我可以帮助您。你能在 github 上分享这个项目还是它是专有的?

标签: roku brightscript


【解决方案1】:

检查这个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, …] 

‘我们也可以把函数引用放在一个数组中 references0 '通过数组元素函数引用调用doSomething 考虑到这一点,让我们回到在列表视图屏幕中实现菜单的第二种方法。数组 menuFunctions 包含每个通道的屏幕创建函数的名称。这些与它们在相关列表屏幕中对应的列表项的顺序相同。然后,当在列表屏幕的事件循环中处理 isListItemSelected 事件时,我们从 menuFunctions 数组中获取相应的函数名称。然后在正确的数组元素上使用“()”运算符通过引用调用该函数:

menuFunctions[msg.GetIndex()]()'根据索引调用函数 在示例通道中,我们使用函数引用方法。要查看菜单项的实际作用,请单击早餐菜单项,您会在一个简单的海报屏幕中看到详细的早餐菜单:

单击“午餐”菜单项会显示详细的午餐菜单,这是使用网格屏幕实现的:

更深入的导航 到目前为止,我们已经了解了如何使用列表屏幕将简单的类别导航构建到频道中。从上面的海报或网格屏幕等屏幕移动到频道中的其他屏幕同样容易。只需在屏幕的事件循环中处理 isListItemSelected 事件,即可检测项目何时被选中并做出适当响应。

在示例频道中,您可以单击早餐菜单海报屏幕中的任何项目以显示详细信息屏幕,其中包含有关所选项目的更多信息。此屏幕的示例(也称为“跳板”屏幕)如下所示:

此屏幕右侧的两个按钮演示了另一种 BrightScript 导航技术。 When one of these buttons is selected, the details screen receives an isButtonPressed event.与事件一起发送的消息包含所选按钮的索引。与列表、海报和网格屏幕项目索引一样,此按钮索引可用于控制通道响应按钮按下的操作,包括导航到新屏幕、打开对话框和其他操作。

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

为了尽量减少示例频道下载的大小,只有早餐和午餐列表屏幕项目打开海报或网格屏幕。此外,只有早餐菜单海报屏幕项目可以点击打开详细屏幕。您可以轻松地使用这两个类别作为指南,自行完成频道。或者,您可以按原样使用代码开始在您自己的频道中导航。编码愉快!

【讨论】:

  • 感谢您的回答。我尝试了两种方式 First Way 不起作用,因为我只使用了一个 roSGScreen 和一个 Scene 节点。第二种方式是一次它的句柄我单击保存按钮以完美工作,但在重定向 URL 屏幕到登录屏幕它不是句柄。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-15
相关资源
最近更新 更多