B4J Library [ABMaterial]: MultiPicker

Ola

This is some nice multipicker i found, it could be useful one day.

MashMultiPicker.gif


B4X:
mmp.Initialize(page,"days",True)
    mmp.AddListItem("sun","Su")
    mmp.AddListItem("mon","Mo")
    mmp.AddListItem("tue","Tu")
    mmp.AddListItem("wed","We")
    mmp.AddListItem("thu","Th")
    mmp.AddListItem("fri","Fr")
    mmp.AddListItem("sat","Sa")
    page.Cell(2,1).AddComponent(mmp.ABMComp)
    
    Dim chkb As MashMultiPicker
    chkb.Initialize(page,"proglang",False)
    chkb.AddCheckBoxItem("c","JAN",True)
    chkb.AddCheckBoxItem("js","FEB",False)
    chkb.AddCheckBoxItem("swift","MAR",True)
    chkb.AddCheckBoxItem("java","APR",False)
    chkb.AddCheckBoxItem("csharp","MAY",False)
    chkb.AddCheckBoxItem("cpp","JUN",True)
    chkb.AddCheckBoxItem("php","JUL",False)
    chkb.AddCheckBoxItem("aug","AUG",False)
    chkb.AddCheckBoxItem("sep","SEP",False)
    chkb.AddCheckBoxItem("oct","OCT",False)
    chkb.AddCheckBoxItem("nov","NOV",False)
    chkb.AddCheckBoxItem("dev","DEC",False)
    chkb.AddSelection("cpp")
    chkb.AddSelection("sep")
    page.Cell(3,1).AddComponent(chkb.ABMComp)

Will add the events later on..
 

Attachments

  • MashMultiPicker.bas
    6 KB · Views: 346

Mashiane

Expert
Licensed User
Longtime User
Did some house cleaning..

MashMultiPicker.gif


1. Only 1 method i.e. AddItem is used to add items
2. Added onSelect event
3. Added onUnselect event
4. Added functionality to return selected items

Define control in ClassGlobals

B4X:
Dim mmp As MashMultiPicker

On ConnectPage add control

B4X:
mmp.Initialize(page,"days")
    mmp.AddItem("sun","Su",True)
    mmp.AddItem("mon","Mo",False)
    mmp.AddItem("tue","Tu",True)
    mmp.AddItem("wed","We",False)
    mmp.AddItem("thu","Th",False)
    mmp.AddItem("fri","Fr",False)
    mmp.AddItem("sat","Sa",True)
    page.Cell(2,1).AddComponent(mmp.ABMComp)

Trap Events

B4X:
Sub days_select(value As Map)
    'return selected items on select
    Dim opt As String = value.Get("value")
    page.Msgbox("",opt,"Select","OK",False,"","")
    
  
    
End Sub

Sub days_unselect(value As Map)
    'Dim opt As String = value.Get("value")
    'page.Msgbox("",opt,"Unselect","OK",False,"","")
    Dim sel As String = mmp.GetSelection
    page.Msgbox("",sel,"Unselect","OK",False,"","")
    
End Sub

Another way to get selected items from another sub

B4X:
    Dim sel As String = mmp.GetSelection
    page.Msgbox("",sel,"Unselect","OK",False,"","")
 

Attachments

  • MashMultiPicker.bas
    5.9 KB · Views: 344

Mashiane

Expert
Licensed User
Longtime User
This should be the final version. What's new? Removed the array that was being pushed at each element select/unselect and used a built in method to get selected items, this has ensured that this can be used to select one item at a time too.

MultiPicker.png


The true in initialize is telling the component that it should be single select i.e. multiple selections off.

Example:

B4X:
wdays.Initialize(page,"wdays",True)
    Dim wdays1 As Map = CreateMap("1":"Sun", _
    "2":"Mon", _
    "3":"Tue", _
    "4":"Wed", _
    "5":"Thu", _
    "6":"Fri", _
    "7":"Sat")
    For ddc = 0 To 6
        Dim wdn As String = wdays1.GetKeyAt(ddc)
        Dim wdm As String = wdays1.GetValueAt(ddc)
        wdays.AddItem(wdn,wdm,False)
    Next
    page.Cell(1,1).AddComponent(wdays.ABMComp)
    
    days.Initialize(page,"weekday",True)
    For ddc = 1 To 31
        days.AddItem(ddc,ddc,False)
    Next
    page.Cell(2,1).AddComponent(days.ABMComp)
    
    Dim months As Map = CreateMap("1":"Jan", _
    "2":"Feb", _
    "3":"Mar", _
    "4":"Apr", _
    "5":"May", _
    "6":"Jun", _
    "7":"Jul", _
    "8":"Aug", _
    "9":"Sep", _
    "10":"Oct", _
    "11":"Nov", _
    "12":"Dec")
    
    mmp.Initialize(page,"days",False)
    Dim mTot As Int = months.Size - 1
    Dim mCnt As Int
    For mCnt = 0 To mTot
        Dim mnum As String = months.GetKeyAt(mCnt)
        Dim mnam As String = months.GetValueAt(mCnt)
        mmp.AddItem(mnum,mnam,False)
    Next
    page.Cell(2,1).AddComponent(mmp.ABMComp)

In the instances above, the numeric ids will be what will be returned. I like that this is responsive too.
 
Top