有没有办法将项目更新或附加到RowList内容,同时保持对当前所选/突出显示的行项目的关注?
rowList中的每一行都是一个异步加载的独立列表。 rowList通过observeField方法更新(图1)。问题是当新内容添加到行列表时,焦点将重置为第一行中的第一个项目。我希望将焦点放在用户导航到的任何行项上,而其余的行是异步加载的。
我认为问题可能是我每次都将RowList.content设置为新的更新的masterList(图2)。
我更改代码以附加新的行项目,它还会使焦点重置为第一行。
Fig 1.) m.ApiMixedListTask.observeField("responseObject", "onMixedListResponse") Fig 2.) function onMixedListResponse() masterList.push(newRowItems) m.top.gridContent = masterList end function
图3.)RowList:https://sdkdocs.roku.com/display/sdkdoc/RowList
<RowList
id="RowList"
focusBitmapUri="pkg:/images/focus_grid.9.png"
translation="[-60, 372]"
itemSize="[1327, 218]"
numRows="3"
itemSpacing="[13, 0]"
focusXOffset="[147]"
rowFocusAnimationStyle="fixedFocusWrap"
rowItemSize="[[262, 147]]"
rowItemSpacing="[[16.5, 3]]"
showRowLabel="true"
showRowCounter="true"
rowLabelOffset="[[147, 20]]"
/>
虽然这会导致糟糕的用户体验,但如果无法保持焦点,我可能只需在内容加载时阻止用户交互。
答案 0 :(得分:0)
你是对的!您遇到问题,因为每次都将RowList.content设置为新更新的masterList。 如果你只是将它复制/粘贴到你的项目中,我不确定这段代码是否有用,但它会给你一个你可以做的例子:
for each item in m.ApiMixedListTask.newRowItems
content = createObject("RoSGNode", "ContentNode")
for each key in m.ApiMixedListTask.newRowItems[item]
content[key] = m.ApiMixedListTask.newRowItems[item][key]
end for
m.RowList.content.getChild(0).appendChild(content)
end for
答案 1 :(得分:0)
您需要了解Roku的怪异行为。如果从函数中获取新行的内容,则即使按原样创建,某些单元也将无效。
对于eaxample,此代码将无法正常工作:
function MapMatchList(data, countInARow = 4)
rowListContent = createObject("RoSGNode","ContentNode")
if data = invalid then return rowListContent
list = data.List
if list = invalid then return rowListContent
row = createObject("RoSGNode","ContentNode")
rowListContent.appendChild(row)
counter = 1
for i = 0 to list.count() - 1
if counter > countInARow
counter = 1
row = createObject("RoSGNode","ContentNode")
rowListContent.appendChild(row)
end if
match = MapMatch(list[i])
if match <> invalid
row.appendChild(match)
end if
counter = counter + 1
end for
return rowListContent
end Function
调用函数时,某些单元格变为无效
rows = MapMatchList(m.top.MoreData)
for i = 0 to rows.getChildCount() - 1
m.rowlist.content.appendChild(rows.getChild(i))
end for
您需要更改一些代码:
function MapMatchList(data, countInARow = 4, rowListContent = invalid)
if rowListContent = invalid then rowListContent = createObject("RoSGNode","ContentNode")
最后您可以调用它:
MapMatchList(m.top.MoreData, 4, m.rowlist.content)