This is a part of my Code Snippets collection, needed in many projects.
In many projects I add my DialogClass with basic user actions like choosing an option, input text or just asking yes or no. It is based on B4XDialog and for each project I can add the specific dialogs to the basic ones. This is also a good demonstration, how Resumable Subs and "Wait for" works.
In many projects I add my DialogClass with basic user actions like choosing an option, input text or just asking yes or no. It is based on B4XDialog and for each project I can add the specific dialogs to the basic ones. This is also a good demonstration, how Resumable Subs and "Wait for" works.
For exemple input text:
Dim dlg As DialogClass : dlg.Initialize(Me, Root, "")
wait for (dlg.ShowInputDialog("my question", [some explanations], [ a hint], [default answer], [mode like 'number'], "")) complete (result As String)
If result <> dlg.DIALOGCANCEL Then
'result' is the user-anwer
End If
The DialogClass:
Sub Class_Globals
Private sendermodule As Object
Private s_EventName As String
Private Root As B4XView 'ignore
Private xui As XUI
Private Dialog As B4XDialog
Public DIALOGCANCEL As String = "[DIALOGCANCEL]", DIALOGNEGATIV As String = "[DIALOGNEGATIV]"
Public SelectedValue As Object
Private li_temp As List
Public s_SearchTemplate As String
Private clvList As CustomListView
End Sub
'Initializes the object. You can add parameters to this method if needed.
Public Sub Initialize(module As Object, pg As B4XView, event As String)
sendermodule = module
s_EventName = event
Root = pg
End Sub
#if B4A
Sub Activity_KeyPress (KeyCode As Int) As Boolean 'Return True to consume the event
If KeyCode = KeyCodes.KEYCODE_BACK And Dialog.Close(xui.DialogResponse_Cancel) Then Return True
Return False
End Sub
#End If
Sub MsgDialog(msg As String, titel As String, pos As String, cancel As String, neg As String) As ResumableSub
Dim sf As Object = xui.Msgbox2Async(msg, titel, pos, cancel, neg, Null)
Wait For (sf) Msgbox_Result (Result As Int)
Return Result 'xui.DialogResponse_P
End Sub
Sub YesNoDialog(Msg As String, title As String) As ResumableSub
Dim bOK As Boolean
Dim bmp As Bitmap = LoadBitmap(File.DirAssets, "MyQuestionLogo.png")
Dim sf As Object = xui.Msgbox2Async(Msg, title, "Yes", "", "No", bmp)
Wait For (sf) Msgbox_Result (Result As Int)
If Result = xui.DialogResponse_Positive Then
bOK = True
End If
Return bOK
End Sub
Sub SetDialogTheme(dlg As B4XDialog) 'SetDialogLightTheme
dlg.BackgroundColor = xui.Color_White
dlg.ButtonsColor = xui.Color_White
dlg.BorderColor = xui.Color_Gray
dlg.ButtonsTextColor = 0xFF007DC3
End Sub
Sub SetCLVTheme(clv As CustomListView, textcolor As Int)
clv.sv.ScrollViewInnerPanel.Color = 0xFFDFDFDF
clv.sv.Color = Dialog.BackgroundColor
clv.DefaultTextBackgroundColor = xui.Color_White
clv.DefaultTextColor = textcolor
End Sub
Sub SetSearchDialogTheme(search As B4XSearchTemplate, textcolor As Int)
If textcolor = 0 Then textcolor = 0xFF5B5B5B 'https://www.b4x.com/android/forum/threads/b4x-share-your-b4xdialog-templates-theming-code.131243/#content
search.SearchField.TextField.TextColor = textcolor
search.SearchField.NonFocusedHintColor = textcolor
SetCLVTheme(search.CustomListView1, textcolor)
If search.SearchField.lblV.IsInitialized Then search.SearchField.lblV.TextColor = textcolor
If search.SearchField.lblClear.IsInitialized Then search.SearchField.lblClear.TextColor = textcolor
SetDialogTheme(Dialog)
End Sub
Sub ShowListDialog(li As List, title As String) As ResumableSub
Dim iIndex As Int = -1
Dim dlg As B4XDialog : dlg.Initialize(Root) : Dialog = dlg
SetDialogTheme(dlg)
dlg.Title = title
' dlg.BackgroundColor = xui.Color_RGB(0, 0x4d, 0x40)
' dlg.VisibleAnimationDuration = 500
Dim options As B4XListTemplate
options.Initialize
SetCLVTheme(options.CustomListView1, 0xFF5B5B5B)
'options.CustomListView1.DefaultTextBackgroundColor = xui.Color_RGB(0, 0x4d, 0x40)
options.Resize(options.mBase.Width,options.mBase.Height - 10dip)
options.Options = li
Wait For (Dialog.ShowTemplate(options, "", "", "CANCEL")) Complete (Result As Int)
If Result = xui.DialogResponse_Positive Then
Dim sSel As String = options.SelectedItem
For i = 0 To li.Size - 1
If li.Get(i) = sSel Then iIndex = i
Next
End If
Return iIndex
End Sub
Sub ShowInputDialog(titel As String, labeltitel As String, hint As String, text As String, mode As String, negtext As String) As ResumableSub
Dim sInput As String
Dim dlg As B4XDialog : dlg.Initialize(Root) : Dialog = dlg
SetDialogTheme(dlg)
dlg.Title = titel
Dim input As B4XInputTemplate : input.Initialize
input.lblTitle.Text = labeltitel
input.Text = text
input.TextField1.EditTextHint = hint
input.TextField1.TextColor = 0xFF5B5B5B
input.lblTitle.TextColor = 0xFF5B5B5B
If mode = "number" Then
input.ConfigureForNumbers(False, False)
End If
Wait For (Dialog.ShowTemplate(input, "OK", negtext, "CANCEL")) Complete (Result As Int)
If Result = xui.DialogResponse_Positive Then
sInput = input.Text
Else if Result = xui.DialogResponse_Negative Then
sInput = DIALOGNEGATIV
Else
sInput = DIALOGCANCEL
End If
Return sInput
End Sub
Sub ShowSearchDialog(li As List) As ResumableSub
Dim sSelected As String
Dim dlg As B4XDialog : dlg.Initialize(Root) : Dialog = dlg 'B4XSearchTemplate
Dim seach As B4XSearchTemplate : seach.Initialize
'seach.Resize(modH.GetDlgWidth, modH.GetDlgHight * 0.6)
seach.SetItems(li)
SetSearchDialogTheme(seach, 0)
Dim rs As Object = Dialog.ShowTemplate(seach, "", "", "CANCEL")
If s_SearchTemplate <> "" Then
Sleep(100) 'https://www.b4x.com/android/forum/threads/solved-b4xsearchtemplate-how-to-pre-set-text.135952/
seach.SearchField.Text = s_SearchTemplate
End If
Wait For (rs) Complete (Result As Int)
If Result = xui.DialogResponse_Positive Then
s_SearchTemplate = seach.SearchField.TextField.Text
sSelected = seach.SelectedItem
End If
Return sSelected
End Sub
Last edited: