I have what appears to be a simple question - How to you load a panel (created and saved using Designer) onto a B4X page?
I have tried the following code and it does not show the new panel.
My code to load panel:
Private Sub B4XPage_Created (Root1 As B4XView)
Log("B4XAddPlayer_Created")
Root = Root1
Root.LoadLayout("frmAddPlayer") ' This is the B4X page - this bit works as expected.
panel1.visible = false ' This hides the original panel added to frmAddPlayer.
' This is my code - it was taken from Eric's example loading panels into customerlistview
Dim p As B4XView = xui.CreatePanel("")
p.SetLayoutAnimated(0, 0, 0, 280 , 290)
p.LoadLayout("pnlAddPlayer") ' This is the Panel containing a few views.
p.BringToFront ' My bit just to make sure it appears on top
p.Visible = True
End Sub
Basically, the old panel1 vanishes (as expected) but the new panel does not appear.
Some help, or a pointer a previous post, would be much appreciated.
In my opinion it is not a good idea to mix up layouts in Designer and code.
Why do you add a Panel in the code to add a layout ?
Simply load the new layou directly onto Rootpanel
Sorry for a rushed reply but I do not have much time. You have made two errors. You are declaring your new panel inside a subroutine - a local variable. When the subroutine ends the panel is destroyed. Secondly, you are not initialising the panel.
Try this code ...
B4X:
Sub Class_Globals
Private Root As B4XView
Private xui As XUI
Dim p As Panel ' Declare the panel here ####
End Sub
Public Sub Initialize
' B4XPages.GetManager.LogEvents = True
End Sub
'This event will be called once, before the page becomes visible.
Private Sub B4XPage_Created (Root1 As B4XView)
Root = Root1
Root.LoadLayout("MainPage")
p.Initialize("") ' Initialise the panel #####
p.Color = xui.Color_Green
Root.AddView(p, 0, 0, 280dip, 200dip)
End Sub
'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.
Private Sub Button1_Click
xui.MsgboxAsync("Hello world!", "B4X")
End Sub
Thanks help, looks like using methods for updating customerListView was totally barking up the wrong street. Did not even look at the Addview() (as they say "There are more things in heaven and earth, Horatio").
I look forward to giving your suggestion a try and report back (hopefully it will be useful for the community).
Nearly worked but I need to load a layout generated by Designer - so l replace the line#18 with p.loadLayout("pnlAddPlayer") and it works.
However, for some reason the panel loads slightly high and undersize - not sure why. I have attached a example project file to show what I have done, if anybody can explain why the loaded panel is unsize I would be most grateful.
Also with regards to the layout file pnlAddPlayer.bal. I initially set the anchors on the view panel "pnlAddPlayer1" to top, bottom, left and right but for some reason it would not show until its anchors where changed to top and left only.
Private Sub B4XPage_Created (Root1 As B4XView)
Root = Root1
Root.LoadLayout("MainPage")
Dim p As B4XView = xui.CreatePanel("")
p.SetLayoutAnimated(0, 0, 0, Root.Width, Root.Height - 100) 'set the content size
p.LoadLayout("pnlAddPlayer")
Root.AddView(p, 0, DipToCurrent(100), p.Width, p.Height)
End Sub
In my opinion it is not a good idea to mix up layouts in Designer and code.
Why do you add a Panel in the code to add a layout ?
Simply load the new layou directly onto Rootpanel
Sub Class_Globals
Private Root As B4XView
Private xui As XUI
Private PanelContainer As B4XView
End Sub
Public Sub Initialize
' B4XPages.GetManager.LogEvents = True
End Sub
'This event will be called once, before the page becomes visible.
Private Sub B4XPage_Created (Root1 As B4XView)
Root = Root1
Root.LoadLayout("MainPage")
PanelContainer.LoadLayout("pnlAddPlayer")
End Sub
Hi, Guys
I adopted Klaus's method of using root.loadlayout() - (see the attachment to his post) as I believe it gave the simplest solution and scaled itself to match the phone I was using.
Hi, Guys
I adopted Klaus's method of using root.loadlayout() - (see the attachment to his post) as I believe it gave the simplest solution and scaled itself to match the phone I was using.
Unfortunately, quite some people ask a question, but do not explain the problem.
The answer to the question can be very different from the answer to the problem.
In my professional life I encountered this quite often:
I have a question ?
OK, but what is your problem.
With experience, I never answered the question before I got an explanation on 'what is the problem'.
And very often the solution was not a direct answer to the question, but another more efficient one.