【问题标题】:Navigation concept in RokuRoku 中的导航概念
【发布时间】:2019-10-27 19:03:43
【问题描述】:

我在 Roku Brightscript 的屏幕导航中遇到了一些问题。请任何人帮助我如何在我的 Roku 项目中管理 5-6 屏幕。我想从 1 到 2 屏幕导航,也想从该屏幕返回。这是我过去 6 个月遇到的一些主要问题。我做不到。你身边的一些帮助有助于我理解。

目前,我已经按照以下步骤进行了尝试

1-如果我想进入 2 个屏幕,那么我会在下面的部分进行

   m.top.AppendChild(m.secondscreen)
   m.secondscreen.setFocus(true)
   m.secondscreen.visible="true"

2- 当我在第二个屏幕返回键中单击返回时,我会将其返回 false 以便返回到第一个屏幕,在这里我将执行此操作

   m.secondscreen.setFocus(false)
   m.secondscreen.visible="false"
   return true

在这里它将来到第一个屏幕。所以像这样,我会去所有的页面。但我知道这不是 Roku 中的确切过程。因此,这样做我遇到了很多困难。按照上述程序,我无法从 5 个屏幕移动到 1 个屏幕 因此,如果您有的话,任何人都可以通过一些例子让我理解。将不胜感激

【问题讨论】:

    标签: xml roku brightscript


    【解决方案1】:

    我在一些已发布的频道上使用了 Roku 提供的视图堆栈组件。

    我鼓励你使用它,它会使屏幕处理更容易。

    请看GithubSampleDocs

    起初,设置可能会很痛苦,但毫无疑问,随着您的应用程序不断增长,它的可扩展性更高。

    要显示一个屏幕,你可以这样称呼它:

    viewOne = CreateObject("roSGNode", "customScreen")
    m.top.ComponentController.CallFunc("show", {
      view: viewOne
    })
    

    要手动关闭屏幕,只需将属性“close”更改为 true。

    viewOne.close = true
    

    您可以继续调用 show 方法,它会将所有这些视图追加到堆栈中。

    您还可以通过让组件控制器处理您的屏幕堆栈来获得一些功能:

    currentView - 链接到 ViewStack 当前显示的视图(此视图代表 ViewStack 显示的视图。

    allowCloseChannelOnLastView - 如果为 true,则当按下后退按钮或前一个视图将视图的关闭字段设置为 true 时通道关闭

    allowCloseLastViewOnBack - 如果为 true,则关闭当前视图,用户可以通过新视图的 wasClosed 回调打开另一个视图

    请注意 如果显示另一个不使用 ViewStack 的视图,它不会反映在堆栈上,也不会被当前视图引用访问)

    ===============更新==========

    使用原始问题的示例代码(假设您设置了视图堆栈):

    ' To show the second screen
    m.top.ComponentController.CallFunc("show", {
          view: m.secondView
    })
    
    ' to show another view on top.
    m.thirdView = CreateObject("roSGNode", "thirdView")
    m.top.ComponentController.CallFunc("show", {
          view: m.thirdView
    })
    ' to close third screen and go back to second screen
    m.thirdView.close = true
    

    【讨论】:

    • 你有什么例子吗?
    • @NikunjChaklasiya,一个很好的起点是使用 hello world 应用程序link,这样您就可以准备好设置。在 MainScene.brs 上,覆盖“show”方法以显示响应中指向的第一个屏幕。 screenOne = CreateObject("roSGNode", "customScreen") m.top.ComponentController.CallFunc("show", { view: screenOne })
    • 感谢您的回复,但我还是很困惑。
    • 别担心,您能更具体地说明您为什么感到困惑吗? @NikunjChaklasiya
    • 我想你知道第一个文件总是用 roSGScreen 创建的,然后是 roSGNode 的第二个文件,所以这里的 show 函数 write 是第一个屏幕代码或第二个屏幕代码。
    【解决方案2】:

    我想到了另一种导航方式。只需将所有小部件或组件添加到一个组中,然后在 ROKU 中应用隐藏/显示概念。它对我来说是改变屏幕的工作。 ROKU 不提供任何特定的导航。

    【讨论】:

      【解决方案3】:

      我假设你的 m.secondscreen 是一个“roSGScreen”组件,如果是这样,你是正确的,你是不正确的。 Roku 场景图应用程序应该只创建一个“roSGScreen”。

      “屏幕”的概念令人困惑,因为您可以创建许多实际上只是视图的组件,这些组件可能被视为“屏幕”。您的唯一场景应该控制活动视图(子组件,而不是 roSGScreens),并且可以根据用户操作根据需要附加/分离或显示/隐藏子组件。

      从技术上讲,我很确定您想要管理 5 个视图,而不是 5 个屏幕。

      我建议花一些时间研究 SDK 文档教程中的示例应用程序,以了解更多信息。

      【讨论】:

      • 你是说没有内置的好方法(或没有最佳实践)在场景之间转换?在许多其他开发 sdk 中,我们推送/弹出视图控制器、导航到/返回页面等。没有这样的概念吗?我们是否应该将一个场景视为一个单一的东西,并且只操纵该场景内部的视图?
      • @Jonny 您最后的陈述是正确的。正如 Joe T 所提到的,最佳实践是拥有一个 Scene 组件,您可以在其中管理屏幕/页面/视图(无论您想如何称呼它们),并使用您自己的导航逻辑。这些视图通常会扩展Group 组件并拥有自己的组件结构。
      【解决方案4】:

      在您的代码中添加一件事:

      m.secondscreen.close = true return true

      需要 Roku 导航第一个关闭屏幕。第一个屏幕关闭后,第二个屏幕将打开。这绝对是工作。

      【讨论】:

      • 是的,但我做这件事的过程是错误的。你能否详细说明我应该如何处理。你如何处理这个
      • 但是如果我从第 5 个屏幕切换到第 2 个屏幕,那么我该怎么做呢。
      • 在这里,如果我附加该屏幕,那么它将通过错误
      • Roku 支持自动返回按钮。但它的处理习惯。在打开第二个屏幕之后首先关闭第一个屏幕。首先写 `m.firstscreen.setFocus(true) m.firstscreen.visible="true" m.firstscreen.close="true" m.secondscreen.setFocus(true) m.secondscreen.visible="true" 我希望这是有帮助。
      • 这是您需要打开屏幕的每一次后退键关闭。之后打开下一个屏幕。在你的代码中检查它
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-25
      • 1970-01-01
      • 1970-01-01
      • 2021-01-14
      • 1970-01-01
      • 1970-01-01
      • 2020-09-15
      相关资源
      最近更新 更多