2

我正在使用PanelSet该类创建一个由两个面板组成的设置屏幕:

  • panelA左侧显示整体设置选项列表
  • panelB显示在右侧,包括每个项目的不同选项列表panelA

当用户更改焦点项目时,如何替换Panel右侧显示的内容panelA

Roku 的文档指出您必须使用该方法replaceChild,但我无法弄清楚它应该如何工作或任何示例。这是我正在尝试的,但它不起作用:

function showPanelInfo()
    if m.panelA.list.itemFocused = 0
        m.panelset.replaceChild(m.panelB, 3)
    else
        m.panelset.replaceChild(m.panelC, 3)
    end if
end function

Function init()
    m.panelset = createObject("roSGNode", "PanelSet")

    ' Left-hand side panel with two items list
    m.panelA = m.panelset.createChild("OptionsListPanel")

    ' Right-hand side panels with different lists for each item on left-hand side panel
    m.panelB = m.panelset.createChild("OptionsBPanel")
    m.panelC = createObject("roSGNode", "OptionsCPanel")

    m.panelA.list.observeField("itemFocused", "showPanelInfo")
...
end function
4

2 回答 2

3

如果您使用GridPanelListPanel,您应该观察它的createNextPanelIndex字段,并在观察者中简单地将新面板设置为它的nextPanel字段。因此,通常您永远不应该手动插入/替换/创建PanelSet的子级。在这里这里检查它是如何工作的。如果您使用普通的 Panel 节点,它可能会更复杂一些,但我相信情况并非如此。

示例代码:

Function showPanelInfo()
  if m.panelA.list.itemFocused = 0
    m.panelset.nextPanel = m.panelB
  else
    m.panelset.nextPanel = m.panelC
  end if
end function

Function init()
  m.panelset = createObject("roSGNode", "PanelSet")

  ' Left-hand side panel with two items list
  m.panelA = m.panelset.createChild("OptionsListPanel")

  ' Right-hand side panels with different lists for each item on left-hand side panel
  m.panelB = m.panelset.createChild("OptionsBPanel")
  m.panelC = createObject("roSGNode", "OptionsCPanel")

  m.panelA.observeField("createNextPanelIndex", "showPanelInfo")
  ...
end function
于 2017-02-23T10:42:41.213 回答
1

面板集没有nextPanel。只有列表面板和网格面板有nextPanel. 所以,

m.panelA.nextPanel = m.panelB
于 2019-05-19T18:06:23.657 回答