Концепция навигации в Roku

У меня возникла проблема с экранной навигацией в Roku Brightscript. Пожалуйста, помогите мне, как я могу управлять экраном 5-6 в моем проекте Roku. Я хочу перейти с 1 на 2 экрана, а также хочу вернуться с этого экрана. Это серьезная проблема, которая у меня возникла за последние 6 месяцев. Я не могу этого сделать. Некоторая помощь с вашей стороны помогает мне понять.

В настоящее время я попытался выполнить следующую процедуру

1-если я хочу перейти на 2 экрана, я сделаю часть ниже

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

2- когда я нажимаю на кнопку возврата на втором экране, я верну ее false, чтобы вернуться на 1-й экран, и здесь я просто сделаю это

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

Здесь он перейдет к 1-му экрану. Вот так я перейду на все страницы. Но я знаю, что в Roku это не совсем тот процесс. Таким образом, я столкнулся со многими трудностями, делая это. И я не могу перейти с 5 экранов на 1 экран, следуя описанной выше процедуре. Так что любой, дайте мне понять, с помощью какого-нибудь примера, если он у вас есть. Он будет вам благодарен


person Bishal Seth    schedule 13.06.2019    source источник


Ответы (4)


Я предполагаю, что ваш m.secondscreen является компонентом roSGScreen, и если это так, то вы правы, что ошибаетесь. В приложении графа сцены Roku должен быть создан только один "roSGScreen".

Концепция «экрана» сбивает с толку, потому что вы можете создать множество компонентов, которые можно рассматривать как «экраны», когда на самом деле они просто представления. Ваша единственная сцена должна контролировать активные представления (субкомпоненты, а не roSGScreens) и может присоединять / отсоединять или показывать / скрывать субкомпоненты по мере необходимости в зависимости от действий пользователя.

Технически говоря, я почти уверен, что вы хотите управлять 5 видами, а не 5 экранами.

Я предлагаю потратить некоторое время на пример приложения из руководства по документации SDK, чтобы узнать об этом больше.

person Joe T    schedule 13.06.2019
comment
Вы говорите, что нет встроенного хорошего способа (или нет лучшей практики) для перехода между сценами? Во многих других SDK для разработчиков мы нажимаем / открываем контроллеры просмотра, переход на / назад со страниц и т. Д. Нет такого понятия? Должны ли мы думать о сцене как о чем-то одном и манипулировать видами только внутри нее? - person Jonny; 24.06.2019
comment
@Jonny Ваше последнее утверждение верно. Как упоминал Джо Т., лучше всего иметь Scene компонент, в котором вы управляете экранами / страницами / представлениями (как хотите их называть) с вашей собственной логикой навигации. Эти представления обычно расширяют Group компонент и имеют собственную структуру компонентов. - person juliomalves; 25.06.2019

Я использовал компонент стека представлений, предоставленный Roku на некоторых опубликованных каналах.

Я рекомендую вам использовать его, это упростит работу с экраном.

См. Github Образец Документы.

Возможно, сначала настройка может быть болезненной, но определенно она более масштабируема, поскольку ваши приложения продолжают расти.

Чтобы показать экран, вы называете его так:

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
person Roger Ramirez    schedule 25.07.2019
comment
вы выполняете какой-нибудь пример по этому поводу? - person Nikunj Chaklasiya; 26.07.2019
comment
@NikunjChaklasiya, лучше всего начать с приложения hello world ссылка, с этим у вас будет готово установка. На вашем MainScene.brs переопределите метод show, чтобы отобразить ваш первый экран, как указано в ответе. screenOne = CreateObject("roSGNode", "customScreen") m.top.ComponentController.CallFunc("show", { view: screenOne }) - person Roger Ramirez; 26.07.2019
comment
Спасибо за ответ, но все же я в замешательстве. - person Nikunj Chaklasiya; 29.07.2019
comment
Не беспокойтесь, можете ли вы более конкретно объяснить, почему вы запутались? @NikunjChaklasiya - person Roger Ramirez; 29.07.2019
comment
Я думаю, вы знаете, что первый файл всегда создается с помощью roSGScreen, а затем второй для roSGNode, поэтому здесь функция show write - это код первого экрана или код второго экрана. - person Nikunj Chaklasiya; 30.07.2019
comment
здесь пользовательский экран создает второй экран, поэтому функция show пишет для кода второго экрана или кода первого экрана каждый раз, когда здесь возникает путаница. - person Nikunj Chaklasiya; 30.07.2019
comment
@NikunjChaklasiya только что обновил мой ответ, надеюсь, теперь все ясно. - person Roger Ramirez; 31.07.2019
comment
Как отмечали другие, обычно приложения имеют одну сцену, и внутри этой сцены у вас есть логика для представлений. developer.roku.com/en-gb/docs/ ссылки / scenegraph / - person Roger Ramirez; 31.07.2019
comment
Спасибо, я, Клирд, сейчас. вот мой первый экранный код напишите в main.brs screen = CreateObject("roSGScreen") m.port = CreateObject("roMessagePort") ' m.st = CreateObject("roSystemTime") screen.setMessagePort(m.port) scene = screen.CreateScene("WisePanel") - person Nikunj Chaklasiya; 31.07.2019
comment
вот код второго экрана второй файл .brs напиши screenOne = CreateObject("roSGNode", "customScreen") m.top.ComponentController.CallFunc("show", { view: screenOne }) Это правильно? - person Nikunj Chaklasiya; 31.07.2019
comment
Потрясающие! так что, если вы следили за проектом GitHub, ваша сцена weakPanel должна расширяться от BaseScene, верно? на вашем WisePanel.brs должна быть функция с именем show, в этой функции вы должны иметь возможность вызывать функцию show из componentController. - person Roger Ramirez; 31.07.2019
comment
Эй, братан, но все равно не работает. Я пытаюсь stackoverflow.com/questions/57374718/ эту штуку. - person Nikunj Chaklasiya; 07.08.2019
comment
Я пытаюсь открыть другую сцену, но каждый раз выдавал такую ​​ошибку функции показа Interface not a member of BrightScript Component (runtime error &hf3) - person Nikunj Chaklasiya; 07.08.2019

Добавьте в свой код одну вещь:

m.secondscreen.close = true return true

Требуется первый закрывающий экран Roku navigation. После закрытия первого экрана откроется второй экран. это определенно работа.

person Nikunj Chaklasiya    schedule 13.06.2019
comment
Да, но мой процесс неправильный. не могли бы вы уточнить, как мне поступить в ответ. как ты справляешься с этим - person Bishal Seth; 13.06.2019
comment
Но если я переключусь с 5-го экрана на 2-й, то как я могу это сделать. - person Bishal Seth; 13.06.2019
comment
Здесь, если я добавлю этот экран, он будет с ошибками - person Bishal Seth; 13.06.2019
comment
Roku поддерживает кнопку возврата автоматически. Но ручка у нее нестандартная. сначала закройте 1-й экран, затем откройте 2-й экран. сначала напишите `m.firstscreen.setFocus (true) m.firstscreen.visible = true m.firstscreen.close = true m.secondscreen.setFocus (true) m.secondscreen.visible = true Надеюсь, это будет полезно. - person Nikunj Chaklasiya; 13.06.2019
comment
это каждое нажатие клавиши возврата, которое вам требуется, открытый экран закрывается. после этого откройте следующий экран. проверьте это в своем коде - person Nikunj Chaklasiya; 13.06.2019
comment
Сначала вы создаете глобальную переменную в main.brs m.global = screen.getGlobalNode () как эти - person Nikunj Chaklasiya; 14.06.2019
comment
Теперь вы используете поле XML ‹id = screensecond type = string onChange = screensecond /› id is use m.global .screenfirst и onchange напишите имя экранной функции - person Nikunj Chaklasiya; 14.06.2019
comment
здесь поле напишите как в xml screenfirst, так и в screensecond - person Nikunj Chaklasiya; 14.06.2019
comment
и вызовите первый экран в событии кнопки - person Nikunj Chaklasiya; 14.06.2019
comment
эй, пожалуйста, пришлите мне код, загрузив его на свой диск. для меня это тоже легко - person Bishal Seth; 14.06.2019
comment
этот код для управления событиями нажатия кнопки gschoppe в github по следующей ссылке: - person Nikunj Chaklasiya; 14.06.2019
comment
Здесь нет ничего, что я хочу - person Bishal Seth; 14.06.2019
comment
простите, братан, пора писать код. это от 3 до 4 дней. Сейчас это недоступно. - person Nikunj Chaklasiya; 14.06.2019
comment
ох, давай устроим вечеринку. каким образом вы подаете заявку. - person Nikunj Chaklasiya; 25.06.2019
comment
У меня такая же проблема. Я создал один экран входа в систему и перехожу на свой домашний экран, но он не обнаруживает. пожалуйста, помогите мне. - person Nikunj Chaklasiya; 25.06.2019
comment
Привет, Бишал, пожалуйста, добавьте ответ на этот вопрос для ознакомления. - person Nikunj Chaklasiya; 04.07.2019

Я придумал другой способ ориентироваться. просто добавьте все добавленные виджеты или компоненты в одну группу и примените концепцию «Скрыть / показать» в ROKU. У меня работа по смене экрана. ROKU не предоставляет какой-либо конкретной навигации.

person Nikunj Chaklasiya    schedule 24.07.2019