Hi,
I needed a multi level menu. I could not find one. May be I might have missed too.
After creating my own data structure, I created a multi-level menu with backbutton (not hardware) feature,
But I have a question. Are there any better optimized ways to do it? I struggled a lot to create tree node strucutre based data type. And I thought I better could create one like this,
Video demo here

The code is inside the Spoiler,
The menu structure I used is,
It is an array which includes, first string Group ID or can be termed as level id
The second value is "parent id" -1 means root
Third one is "Link Text"
Fourth one is "Link"
Fifth is Child id
So, everything is related
I needed a multi level menu. I could not find one. May be I might have missed too.
After creating my own data structure, I created a multi-level menu with backbutton (not hardware) feature,
But I have a question. Are there any better optimized ways to do it? I struggled a lot to create tree node strucutre based data type. And I thought I better could create one like this,
Video demo here

The code is inside the Spoiler,
B4X:
#Region Project Attributes
#ApplicationLabel: Multi Level Menu
#VersionCode: 1
#VersionName:
'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: unspecified
#CanInstallToExternalStorage: False
#End Region
#Region Activity Attributes
#FullScreen: False
#IncludeTitle: True
#End Region
Sub Process_Globals
'These global variables will be declared once when the application starts.
'These variables can be accessed from all modules.
Dim mymenuList As List
End Sub
Sub Globals
'These global variables will be redeclared each time the activity is created.
'These variables can only be accessed from this module.
Private ListView1 As ListView
Private btnBack As Button
End Sub
Sub Activity_Create(FirstTime As Boolean)
'Do not forget to load the layout file created with the visual designer. For example:
Activity.LoadLayout("lyt1")
mymenuList.Initialize
'THE MENU STRUCTURE
'GroupID, ParentID, Link Text, Link URL, Child ID / empty string
mymenuList.Add(Array As String("0","-1","Vinayagar >","","2"))
mymenuList.Add(Array As String("0","-1","Murugan","#link2",""))
mymenuList.Add(Array As String("0","-1","Shiva >","","1"))
mymenuList.Add(Array As String("0","-1","Other Songs","#link3",""))
mymenuList.Add(Array As String("0","-1","Menu Level 1 >","","3"))
mymenuList.Add(Array As String("1","0","Shiva song 1","#link4",""))
mymenuList.Add(Array As String("1","0","Shiva song 2","#link5",""))
mymenuList.Add(Array As String("2","0","Vinayagar song 1","#link",""))
mymenuList.Add(Array As String("2","0","Vinayagar song 2","#link",""))
mymenuList.Add(Array As String("3","0","Menu Level 2 >","","4"))
mymenuList.Add(Array As String("4","3","Song","#",""))
FillTheListBox("0")
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
Sub ListView1_ItemClick (Position As Int, Value As Object)
Dim parseValue() As String
Dim childId As String
Dim idToFill As String
parseValue = Value
childId = parseValue(4)
Log(childId & "Child ID")
idToFill = childId
'clear list only if the groupid is not empty
If childId == "" Then
'Link is available and work with that link
Log("a link clicked from list view" & parseValue(3))
Else
FillTheListBox(idToFill)
End If
End Sub
Sub backButtonPressed
If ListView1.Tag = "-1" Then
Log("You are on root menu")
Else
FillTheListBox(ListView1.Tag)
End If
End Sub
Sub btnBack_Click
'Log("Return to the id " & ListView1.Tag)
backButtonPressed
End Sub
Sub FillTheListBox(groupID As String)
Dim eachItemMenu() As String
'clear the list
ListView1.clear
For i = 0 To mymenuList.Size - 1
Log(groupID)
eachItemMenu = mymenuList.Get(i)
If eachItemMenu(0) == groupID Then
ListView1.AddSingleLine2(eachItemMenu(2),eachItemMenu)
ListView1.Tag = eachItemMenu(1)
End If
Next
End Sub
The menu structure I used is,
It is an array which includes, first string Group ID or can be termed as level id
The second value is "parent id" -1 means root
Third one is "Link Text"
Fourth one is "Link"
Fifth is Child id
So, everything is related
B4X:
'THE MENU STRUCTURE
'GroupID, ParentID, Link Text, Link URL, Child ID / empty string
mymenuList.Add(Array As String("0","-1","Vinayagar >","","2"))
mymenuList.Add(Array As String("0","-1","Murugan","#link2",""))
mymenuList.Add(Array As String("0","-1","Shiva >","","1"))
mymenuList.Add(Array As String("0","-1","Other Songs","#link3",""))
mymenuList.Add(Array As String("0","-1","Menu Level 1 >","","3"))
mymenuList.Add(Array As String("1","0","Shiva song 1","#link4",""))
mymenuList.Add(Array As String("1","0","Shiva song 2","#link5",""))
mymenuList.Add(Array As String("2","0","Vinayagar song 1","#link",""))
mymenuList.Add(Array As String("2","0","Vinayagar song 2","#link",""))
mymenuList.Add(Array As String("3","0","Menu Level 2 >","","4"))
mymenuList.Add(Array As String("4","3","Song","#",""))