Roku Developer Program

Join our online forum to talk to Roku developers and fellow channel creators. Ask questions, share tips with the community, and find helpful resources.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
cesarcarlos
Binge Watcher

"ObserveField visible" is not running when the screen appears

I have a postergrid where a user selects between a number of posters. When the user selects one, the ShowTopicScreen sub is called:

ShowTopicScreen.brs

sub ShowTopicScreen(topic as Object)
    topicScreen = CreateObject("roSGNode", "TopicScreen")
    topicScreen.content = topic
    topicScreen.ObserveField("visible", "OnDetailsScreenVisibilityChanged")
    ShowScreen(topicScreen)
end sub

sub OnTopicScreenVisibilityChanged(event as Object)
    visible = event.GetData()
    currentScreen = GetCurrentScreen()
    screenType = currentScreen.SubType()
    if visible = false
        if screenType = "HomeScreen"
            currentScreen.jumpToItem = m.selectedTopicIndex
        end if
    end if
end sub

 

The Topic Screen is supposed to read the content data and populate a label and load certain data to a rowlist (which is still under development)

 

TopicScreen.xml

<?xml version="1.0" encoding="UTF-8"?>

<component name="TopicScreen" extends="Group" initialFocus="topicList">
    <script type="text/brightscript" uri="TopicScreen.brs" />
    
	<interface>
        <!-- Specifies the content for the Grid -->
        <field id="content" type="assocarray" />
        <field id="topiccontent" type="node" alias="topicList.content" />
        <field id="rowItemSelected" type="intarray" alwaysnotify="true" alias="topicList.rowItemSelected" />
        <field id="jumpToRowItem" type="intarray" alias="topicList.jumpToRowItem" />
    </interface>
    <children>
        <Label
	        id="titleLabel"
	        width="1020"
			translation="[105,170]"
	    />

        <Label
	        id="textLabel"
	        width="1020"
			translation="[105,190]"
            text="A test label"
	    />
         
        <RowList
            itemComponentName="TopicRowListItemComponent"
            id="topicList"
            translation="[105,240]"
            numRows="2"
            rowitemSize="[[320,180]]"
            rowItemSpacing="[[20,0]]"
            itemSize="[1100,270]"
            rowLabelOffset="[[50,20]]"
            focusXOffset="[50]"
            showRowLabel="[true]"
            rowFocusAnimationStyle="floatingfocus"
        />
    </children>
</component>

 

TopicScreen.brs

sub Init()
    m.top.observeField("visible", "onVisibleChange")

    m.titleLabel = m.top.FindNode("titleLabel")
end sub

sub onVisibleChange()
    'this only runs when I leave the screen
    if m.top.visible = true
        SetContent()
    end if
end sub

sub SetContent() 
    m.titleLabel = m.top.topic.title
end sub

 

The problem is that the OnVisibleChange sub is never called (it is called when I press the back button to go to the first screen, however, if I go back to the topics screen, again it's not called). The TopicScreen is loading as I can see the static label ("A test label") on screen.

Why if the OnVisibleChange() sub not being called and how can I get the data to populate the label?

Tags (2)
0 Kudos
3 REPLIES 3
RokuBen
Community Moderator
Community Moderator

Re: "ObserveField visible" is not running when the screen appears

Your topicScreen.ObserveField call is passing "OnDetailsScreenVisibilityChanged", but the method you want to call is "OnTopicScreenVisibilityChanged"

 

0 Kudos
cesarcarlos
Binge Watcher

Re: "ObserveField visible" is not running when the screen appears

Thanks, I fixed that, but that isn't affecting the issue. The observer that is not working is m.top.observeField("visible", "onVisibleChange") in the TopicScreen.brs file.

0 Kudos
RokuBen
Community Moderator
Community Moderator

Re: "ObserveField visible" is not running when the screen appears

You won't be observer calls for fields that aren't changing.  I'd guess that your TopicScreen is created already visible in its parent.

0 Kudos