I have always shied-away from lists. I knew they were powerful... but still don't understand them.
However, my current need forces me to finally understand them.
I have ten panels. On each of the panels I have an assortment of different EditText, Buttons, Labels, WebViews, etc.
I am now creating two functions... one to enable certain Activity Objects all-at-once and one to disable those same objects all-at-once with a for/next loop.
So, my thought was to use a list of lists... knowing that the advantage of using a list is that it can be any type of object.
However... here's my problem:
Then, after all panels have been loaded, I populate each of the lists:
Next, I fill another list, so I can refer to them with a number 0 - 9 for each panel
Finally, I create two subs, hopefully to set the Enable on each of the List items to either True or False
As you can see... now I don't understand how to tell it to do the Enable on the different types of objects?
I was hoping that I could just define a generic 'object', point it to the list, and 'voila' it would know what kind of object it was because it was a List.
Nope.
I could possibly flag Checkbox as Tag 11, Buttons as Tag 12, EditText as Tag 13, etc. But don't know how to do that, either. Besides, I'm already using the tag value on some of those (particularly the Buttons) so they can all be sent to the same Sub name.
Help! I'm drowning.
However, my current need forces me to finally understand them.
I have ten panels. On each of the panels I have an assortment of different EditText, Buttons, Labels, WebViews, etc.
I am now creating two functions... one to enable certain Activity Objects all-at-once and one to disable those same objects all-at-once with a for/next loop.
So, my thought was to use a list of lists... knowing that the advantage of using a list is that it can be any type of object.
However... here's my problem:
B4X:
[code]
sub globals
' Activity Objects not in Layout files:
Dim WB_OBJECTS As List : WB_OBJECTS.Initialize
Dim WBTOC_OBJECTS As List : WBTOC_OBJECTS.Initialize
Dim ACIM_OBJECTS As List : ACIM_OBJECTS.Initialize
Dim ACIMTOC_OBJECTS As List : ACIMTOC_OBJECTS.Initialize
Dim RT_OBJECTS As List : RT_OBJECTS.Initialize
Dim SETTINGS_OBJECTS As List : SETTINGS_OBJECTS.Initialize
Dim HELP_OBJECTS As List : HELP_OBJECTS.Initialize
Dim LINKS_OBJECTS As List : LINKS_OBJECTS.Initialize
Dim ABOUT_OBJECTS As List : ABOUT_OBJECTS.Initialize
Dim QUEUE_OBJECTS As List : QUEUE_OBJECTS.Initialize
' To make a List of Lists, later
Dim PANELOBJECTS() As List
end sub
Then, after all panels have been loaded, I populate each of the lists:
B4X:
sub Activity_Create
WB_OBJECTS.Add(ButtonWBBack)
WB_OBJECTS.Add(EditTextWBNumber)
WB_OBJECTS.Add(ButtonWBForward)
WB_OBJECTS.Add(ButtonWBQuestion)
WB_OBJECTS.Add(ButtonWBMenu)
WB_OBJECTS.Add(ButtonWBClose)
WB_OBJECTS.Add(ButtonWBExercise)
WB_OBJECTS.Add(ButtonWBTheme)
WB_OBJECTS.Add(EditTextWBUR)
WB_OBJECTS.Add(EditTextWBTitle)
WBTOC_OBJECTS.Add(ButtonWBTOCQuestion)
WBTOC_OBJECTS.Add(ButtonWBTOCMenu)
WBTOC_OBJECTS.Add(ButtonWBTOCClose)
WBTOC_OBJECTS.Add(ImageViewWBTOCUp)
WBTOC_OBJECTS.Add(ImageViewWBTOCDown)
WBTOC_OBJECTS.Add(WebViewWBTOC)
WBTOC_OBJECTS.Add(ImageViewWBTOCTopGlow)
WBTOC_OBJECTS.Add(ImageViewWBTOCBottomGlow)
' And so-on...
end sub
Next, I fill another list, so I can refer to them with a number 0 - 9 for each panel
B4X:
PANELOBJECTS = Array As List(WB_OBJECTS,WBTOC_OBJECTS,ACIM_OBJECTS,ACIMTOC_OBJECTS,RT_OBJECTS, _
SETTINGS_OBJECTS,HELP_OBJECTS,LINKS_OBJECTS,ABOUT_OBJECTS,QUEUE_OBJECTS)
Finally, I create two subs, hopefully to set the Enable on each of the List items to either True or False
B4X:
Sub EnableAllObjects(WhichPanel As Int)
Dim z As Int
Dim TheSize As Int
Dim ThePanelList As List
Dim TheObject As Object
If DEBUG_Debugging3 Then Log(" +++ Begin EnableObjects()")
ThePanelList = PANELOBJECTS(WhichPanel).Get(z)
TheSize = ThePanelList.Size
For z = 0 To TheSize - 1
TheObject = ThePanelList.Get(z)
TheObject.Enabled = True
Next
If DEBUG_Debugging3 Then Log(" --- End of EnableObjects()")
If DEBUG_Debugging3 Then Log(" ")
End Sub
Sub DisableAllObjects(WhichPanel As Int)
Dim z As Int
Dim TheSize As Int
Dim ThePanelList As List
Dim TheObject As Object
If DEBUG_Debugging3 Then Log(" +++ Begin EnableObjects()")
ThePanelList = PANELOBJECTS(WhichPanel).Get(z)
TheSize = ThePanelList.Size
For z = 0 To TheSize - 1
TheObject = ThePanelList.Get(z)
TheObject
Next
If DEBUG_Debugging3 Then Log(" --- End of EnableObjects()")
If DEBUG_Debugging3 Then Log(" ")
End Sub
As you can see... now I don't understand how to tell it to do the Enable on the different types of objects?
I was hoping that I could just define a generic 'object', point it to the list, and 'voila' it would know what kind of object it was because it was a List.
Nope.
I could possibly flag Checkbox as Tag 11, Buttons as Tag 12, EditText as Tag 13, etc. But don't know how to do that, either. Besides, I'm already using the tag value on some of those (particularly the Buttons) so they can all be sent to the same Sub name.
Help! I'm drowning.