Android Question Confused, Have I been coding wrong?

Robert Valentino

Well-Known Member
Licensed User
Longtime User
I have been loading and building all my statelists (that use a checkbox) like the code below ONLY loading the bitmap once and using it in all the statelists. (See LoadStateList below)

But recently my checkboxs have been randomly disappearing (using 6.30 Beta #1) so I had to change the LoadStateList code to load the checkbox bitmap all the time.



B4X:
Sub Globals
  Private           sFWTS_Handicap_Box                 As Panel
   Private            sFWTS_UseHandicapTag               As Label
  Private                sFWTS_UseHandicap             As ToggleButton   
   Private            sFWTS_HandicapBaseTag              As Label   
  Private              sFWTS_HandicapBase             As Label
   Private            sFWTS_HandicapPercentTag             As Label
  Private              sFWTS_HandicapPercent              As Label
   
   Private           sFWTS_BonusPins_Box                 As Panel   
   Private             sFWTS_UseBonusPinsTag               As Label
  Private                sFWTS_UseBonusPins               As ToggleButton
   Private            sFWTS_BonusPinsPerEntryTag            As Label   
  Private              sFWTS_BonusPins                 As Label
   Private            sFWTS_EachEntryGetsPinsTag             As Label   
  Private              sFWTS_EachEntryGetsPins            As ToggleButton
   
   Private          sFWTS_SexOption_Box                 As Panel   
  Private              sFWTS_SexOption_MalesOnly             As ToggleButton
  Private              sFWTS_SexOption_MalesOnlyTag           As Label   
  Private              sFWTS_SexOption_FemalesOnly             As ToggleButton
  Private              sFWTS_SexOption_FemalesOnlyTag           As Label
   
   Private          sFWTS_MysteryDoubles_Options1_Box          As Panel
   Private            sFWTS_MD_Reshuffle                As ToggleButton
   Private            sFWTS_MD_Reshuffle_Tag              As Label
   Private            sFWTS_MD_ProcessAsEliminator         As ToggleButton
   Private            sFWTS_MD_ProcessAsEliminator_Tag        As Label
   
   Private          sFWTS_MysteryDoubles_Options2_Box          As Panel   
   Private            sFWTS_MD_RandomBasedSeating           As ToggleButton
   Private            sFWTS_MD_RandomBasedSeating_Tag        As Label   
   Private            sFWTS_MD_AverageBasedSeating         As ToggleButton
   Private            sFWTS_MD_AverageBasedSeating_Tag        As Label

   Private          sFWTS_MysteryDoubles_Options3_Box          As Panel               
   Private            sFWTS_MD_MultipleEntries            As ToggleButton
   Private            sFWTS_MD_MultipleEntries_Tag          As Label
   Private            sFWTS_MD_MatchToSelf              As ToggleButton
   Private            sFWTS_MD_MatchToSelf_Tag            As Label
   Private            sFWTS_MD_MatchBySex              As ToggleButton
   Private            sFWTS_MD_MatchBySex_Tag            As Label

   Private          sFWTS_LoveDoubles_Options_Box            As Panel   
   Private            sFWTS_LD_FemalesPickMales            As ToggleButton
   Private            sFWTS_LD_FemalesPickMales_Tag          As Label   
   Private            sFWTS_LD_MalesPickFemales            As ToggleButton
   Private            sFWTS_LD_MalesPickFemales_Tag          As Label   
   Private            sFWTS_LD_AnyonePicksAnyone            As ToggleButton
   Private            sFWTS_LD_AnyonePicksAnyone_Tag          As Label
   Private             sFWTS_LD_AnyonePicksOpposite         As ToggleButton   
   Private             sFWTS_LD_AnyonePicksOpposite_Tag       As Label
   

  Private mCBCheckedBox                     As BitmapDrawable
  Private mCBUnCheckedBox                         As BitmapDrawable
   
  Private mCBUseHandicapStateList                     As StateListDrawable
  Private mCBUseBonusPinsStateList                   As StateListDrawable
   Private mCBEveryEntryGetsPinsStateList                   As StateListDrawable

   Private mCBSexOptionMalesOnlyStateList                    As StateListDrawable
   Private mCBSexOptionFemalesOnlyStateList                     As StateListDrawable   

   Private mMDReshuffleStateList                           As StateListDrawable   
   Private mMDMultipleEntriesStateList                         As StateListDrawable   
   Private mMDMatchToSelfStateList                           As StateListDrawable   
   Private mMDMatchBySexStateList                           As StateListDrawable   
   Private mMDProcessAsEliminatorStateList                   As StateListDrawable   
   Private mMDRandomBasedSeatingStateList                   As StateListDrawable   
   Private mMDAverageBasedSeatingStateList                   As StateListDrawable   

   Private mLDFemalesPickMalesStateList                   As StateListDrawable   
   Private mLDMalesPickFemalesStateList                   As StateListDrawable   
   Private mLDAnyonePicksAnyoneStateList                   As StateListDrawable   
   Private mLDAnyonePicksOppositeStateList                   As StateListDrawable   
End Sub

#Region Activity_Create / Activity_Resume / Activity_Pause / Activity_KeyPress
Private Sub Activity_Create(FirstTime As Boolean)
       LoadBitmaps
       LoadStateLists   
End Sub


#Region LoadBitmaps
Private Sub LoadBitmaps
       mCBCheckedBox    = LoadThisBitmapDrawable("checkbox_checked_box.png")
       mCBUnCheckedBox  = LoadThisBitmapDrawable("checkbox_unchecked_box.png")
End Sub
#End Region

Private Sub LoadStateLists
      mCBSexOptionMalesOnlyStateList.Initialize
       mCBSexOptionMalesOnlyStateList.AddState(mCBSexOptionMalesOnlyStateList.State_Checked  , mCBCheckedBox)
       mCBSexOptionMalesOnlyStateList.AddState(mCBSexOptionMalesOnlyStateList.State_Unchecked, mCBUnCheckedBox)

       mCBSexOptionFemalesOnlyStateList.Initialize
       mCBSexOptionFemalesOnlyStateList.AddState(mCBSexOptionFemalesOnlyStateList.State_Checked  , mCBCheckedBox)
       mCBSexOptionFemalesOnlyStateList.AddState(mCBSexOptionFemalesOnlyStateList.State_Unchecked, mCBUnCheckedBox)

       mCBUseHandicapStateList.Initialize
       mCBUseHandicapStateList.AddState(mCBUseHandicapStateList.State_Checked  , mCBCheckedBox)
       mCBUseHandicapStateList.AddState(mCBUseHandicapStateList.State_Unchecked, mCBUnCheckedBox)

       mCBUseBonusPinsStateList.Initialize
       mCBUseBonusPinsStateList.AddState(mCBUseBonusPinsStateList.State_Checked  , mCBCheckedBox)
       mCBUseBonusPinsStateList.AddState(mCBUseBonusPinsStateList.State_Unchecked, mCBUnCheckedBox)

       mCBEveryEntryGetsPinsStateList.Initialize
       mCBEveryEntryGetsPinsStateList.AddState(mCBEveryEntryGetsPinsStateList.State_Checked  , mCBCheckedBox)
       mCBEveryEntryGetsPinsStateList.AddState(mCBEveryEntryGetsPinsStateList.State_Unchecked, mCBUnCheckedBox)
       
       mMDReshuffleStateList.Initialize
       mMDReshuffleStateList.AddState(mMDReshuffleStateList.State_Checked  , mCBCheckedBox)
       mMDReshuffleStateList.AddState(mMDReshuffleStateList.State_Unchecked, mCBUnCheckedBox)       
       
       mMDMultipleEntriesStateList.Initialize
       mMDMultipleEntriesStateList.AddState(mMDMultipleEntriesStateList.State_Checked  , mCBCheckedBox)
       mMDMultipleEntriesStateList.AddState(mMDMultipleEntriesStateList.State_Unchecked, mCBUnCheckedBox)       
       
       mMDMatchToSelfStateList.Initialize
       mMDMatchToSelfStateList.AddState(mMDMatchToSelfStateList.State_Checked  , mCBCheckedBox)
       mMDMatchToSelfStateList.AddState(mMDMatchToSelfStateList.State_Unchecked, mCBUnCheckedBox)       
       
       mMDMatchBySexStateList.Initialize
       mMDMatchBySexStateList.AddState(mMDMatchBySexStateList.State_Checked  , mCBCheckedBox)
       mMDMatchBySexStateList.AddState(mMDMatchBySexStateList.State_Unchecked, mCBUnCheckedBox)       
       
       mMDProcessAsEliminatorStateList.Initialize
       mMDProcessAsEliminatorStateList.AddState(mMDProcessAsEliminatorStateList.State_Checked  , mCBCheckedBox)
       mMDProcessAsEliminatorStateList.AddState(mMDProcessAsEliminatorStateList.State_Unchecked, mCBUnCheckedBox)       
       
       mMDAverageBasedSeatingStateList.Initialize
       mMDAverageBasedSeatingStateList.AddState(mMDAverageBasedSeatingStateList.State_Checked  , mCBCheckedBox)
       mMDAverageBasedSeatingStateList.AddState(mMDAverageBasedSeatingStateList.State_Unchecked, mCBUnCheckedBox)       
       
       mMDRandomBasedSeatingStateList.Initialize
       mMDRandomBasedSeatingStateList.AddState(mMDRandomBasedSeatingStateList.State_Checked  , mCBCheckedBox)
       mMDRandomBasedSeatingStateList.AddState(mMDRandomBasedSeatingStateList.State_Unchecked, mCBUnCheckedBox)             
             
       mLDFemalesPickMalesStateList.Initialize
       mLDFemalesPickMalesStateList.AddState(mLDFemalesPickMalesStateList.State_Checked  , mCBCheckedBox)
       mLDFemalesPickMalesStateList.AddState(mLDFemalesPickMalesStateList.State_Unchecked, mCBUnCheckedBox)                   
       
       mLDMalesPickFemalesStateList.Initialize
       mLDMalesPickFemalesStateList.AddState(mLDMalesPickFemalesStateList.State_Checked  , mCBCheckedBox)
       mLDMalesPickFemalesStateList.AddState(mLDMalesPickFemalesStateList.State_Unchecked, mCBUnCheckedBox)                   
             
       mLDAnyonePicksAnyoneStateList.Initialize
       mLDAnyonePicksAnyoneStateList.AddState(mLDAnyonePicksAnyoneStateList.State_Checked  , mCBCheckedBox)
       mLDAnyonePicksAnyoneStateList.AddState(mLDAnyonePicksAnyoneStateList.State_Unchecked, mCBUnCheckedBox)                               
       
       mLDAnyonePicksOppositeStateList.Initialize
       mLDAnyonePicksOppositeStateList.AddState(mLDAnyonePicksOppositeStateList.State_Checked  , mCBCheckedBox)
       mLDAnyonePicksOppositeStateList.AddState(mLDAnyonePicksOppositeStateList.State_Unchecked, mCBUnCheckedBox)                               

end sub


Code change to below


B4X:
Private Sub LoadStateLists
       mCBSexOptionMalesOnlyStateList     = MakeCBStateList
       mCBSexOptionFemalesOnlyStateList   = MakeCBStateList
       
       mCBUseHandicapStateList         = MakeCBStateList
       mCBUseBonusPinsStateList       = MakeCBStateList
       mCBEveryEntryGetsPinsStateList     = MakeCBStateList
       
       mMDReshuffleStateList         = MakeCBStateList
       mMDMultipleEntriesStateList       = MakeCBStateList
       mMDMatchToSelfStateList         = MakeCBStateList
       mMDMatchBySexStateList         = MakeCBStateList
       mMDProcessAsEliminatorStateList     = MakeCBStateList
       mMDAverageBasedSeatingStateList     = MakeCBStateList
       mMDRandomBasedSeatingStateList     = MakeCBStateList
       
       mLDFemalesPickMalesStateList     = MakeCBStateList
       mLDMalesPickFemalesStateList     = MakeCBStateList
       mLDAnyonePicksAnyoneStateList     = MakeCBStateList
       mLDAnyonePicksOppositeStateList     = MakeCBStateList
End Sub

Private Sub MakeCBStateList As StateListDrawable
       Dim CBCheckedBox  As BitmapDrawable = LoadThisBitmapDrawable("checkbox_checked_box.png")
       Dim CBUnCheckedBox As BitmapDrawable = LoadThisBitmapDrawable("checkbox_unchecked_box.png")
   
       Dim CBStateList    As StateListDrawable
       
       CBStateList.Initialize
       CBStateList.AddState(CBStateList.State_Checked  , CBCheckedBox)
       CBStateList.AddState(CBStateList.State_Unchecked, CBUnCheckedBox)                               
       
       Return CBStateList
End Sub

I was under the impression that if I loaded the bitmap once I could share it with different statelists.

I never doing anything to the bitmap directly, but I do make different check-boxes (Togglebuttons that have one of the statelists as a background (that code not shown)) visible / enabled based on different options selected.

But doing so with the original code just starting making (other check-boxes start disappearing).

So have I been under the wrong impression and I need to load a new bitmap for every statelist?

BobVal
 
Top