Telefonbuch

Sinan Tuzcu

Well-Known Member
Licensed User
Longtime User
Dear,

is there a way to show a list of contacts when clicking a button, and select one of them to return his/her number into an edittext ?

thank you
 

Mark Read

Well-Known Member
Licensed User
Longtime User
Hello Sinan,

maybe this code will help you a little. Read the contacts into a database, database to a list, sort the list and select.

B4X:
'Activity module
Sub Process_Globals
   'These global variables will be declared once when the application starts.
   'These variables can be accessed from all modules.
   
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.
   Dim SQL1 As SQL
   Dim ID As String
      
   Dim lstTable, listOfContacts As List
   Dim ContactsList As WebView
   
   Dim Contact As Contact
   Dim LblContact, LblFav As Label
   Dim FavContacts2 As ListView
   Dim cName, cNumber As String
End Sub

Sub Activity_Create(FirstTime As Boolean)
   ProgressDialogShow2("Checking Contacts...", False)
   ActivityInit
   GetContacts
   GetMyContacts
End Sub

Sub ActivityInit
   'clear the old database file
   If File.Exists(File.DirRootExternal,"contacts.db") Then
      File.Delete(File.DirRootExternal,"contacts.db")
   End If
   
   'Phone contacts are stored in a webview
   ContactsList.Initialize("ContactsList")
   Activity.AddView( ContactsList, 1%x, 10%y, 98%x, 38%y)
   
   'Favourite contacts are stored in a listview
   FavContacts2.Initialize("FavContacts2")
   FavContacts2.SingleLineLayout.Label.TextSize=20
   Activity.AddView(FavContacts2, 1%x, 60%y, 98%x, 38%y)
   
   'Define two labels
   LblContact.Initialize("")
   LblContact.Text="Phone Contacts"
   LblContact.Gravity=Gravity.CENTER_HORIZONTAL
   LblContact.Color=Colors.LightGray
   LblContact.TextSize=4%y
   LblContact.TextColor=Colors.Blue
   
   LblFav.Initialize("")
   LblFav.Text="Favourites"
   LblFav.Gravity=Gravity.CENTER_HORIZONTAL
   LblFav.Color=Colors.LightGray
   LblFav.TextSize=4%y
   LblFav.TextColor=Colors.Blue
   
   Activity.AddView(LblContact,1%x, 1%y, 98%x, 8%y)
   Activity.AddView(LblFav,1%x, 50%y, 98%x, 8%y)
   
End Sub

Sub Activity_Resume
   
End Sub

Sub Activity_Pause (UserClosed As Boolean)
   
End Sub

Sub GetContacts
   
   SQL1.Initialize(File.DirRootExternal, "contacts.db", True)
   'Create the contacts table which holds data about each contact.
   Dim m As Map
   m.Initialize
   m.Put("Id", DBUtils.DB_TEXT)
   m.Put("Name", DBUtils.DB_TEXT)
   m.Put("Number", DBUtils.DB_TEXT)
   DBUtils.CreateTable(SQL1, "Contacts", m, "Id")

   Dim ListOfMaps As List
   ListOfMaps.Initialize
   
   Dim Contacts2 As Contacts2
      
   listOfContacts = Contacts2.GetAll(True,False)
   For I = 0 To listOfContacts.Size - 1 
        
       Contact = listOfContacts.Get(I)
      Dim m As Map
      m.Initialize
      
      m.Put("Id", NumberFormat2(I, 6, 0, 0, False))
      m.Put("Name", Contact.DisplayName)
      m.Put("Number", Contact.PhoneNumber)
      ListOfMaps.Add(m)
            
   Next
   
   DBUtils.InsertMaps(SQL1, "Contacts", ListOfMaps)
   ContactsList.LoadHtml(DBUtils.ExecuteHtml(SQL1,"SELECT Name, Number FROM Contacts ORDER BY Name ASC", Null, 0, True))
   lstTable=DBUtils.ExecuteMemoryTable(SQL1,"SELECT Name, Number FROM Contacts ORDER BY Name ASC", Null, 0)
   
   ContactsList.ZoomEnabled=False
   ProgressDialogHide
End Sub

Sub GetMyContacts
   If File.Exists(File.DirRootExternal,"qSMS-MyContacts.lst")=False Then
      'ToastMessageShow ("No contacts to load," & CRLF & "please use select contacts in menu!", True)
      Return True
   End If
   
   Dim savelist As List
   
   savelist=File.ReadList(File.DirRootExternal,"qSMS-MyContacts.lst")
   
   FavContacts2.Clear
   
   'Save contacts from list to listview
   For n=0 To savelist.Size-1
      FavContacts2.AddSingleLine(savelist.Get(n))
   Next
   
   FavContacts2.Invalidate
   
End Sub   

'Catch a selected contact and store DisplayName in cName, PhoneNumber in cNumber
Sub ContactsList_OverrideUrl (Url As String) As Boolean
   'parse the row and column numbers from the URL
   Dim values() As String
   values = Regex.Split("[.]", Url.SubString(7))
   Dim col, row As Int
   col = values(0)
   row = values(1)
      
   Dim val(3) As String
   val=lstTable.get(row)
   'ID=val(0)
   cName=val(0)
   cNumber=val(1)
   
   For c=0 To FavContacts2.Size-1
      If FavContacts2.GetItem(c)=cName & "-" & cNumber Then Return True
   Next   
      
   FavContacts2.AddSingleLine(cName & "-" & cNumber)
   SortMyContacts
   
   Return True 'Don't try to navigate to this URL

End Sub

Sub SortMyContacts
   Dim MyList As List
   
   'Save contacts from listview to list
   MyList.Initialize
   For c=0 To FavContacts2.Size-1
      MyList.Add(FavContacts2.GetItem(c))
   Next
   
   MyList.Sort(True)
   FavContacts2.Clear
   
   'Save contacts from list to listview
   For n=0 To MyList.Size-1
      FavContacts2.AddSingleLine(MyList.Get(n))
   Next
   
   FavContacts2.Invalidate
End Sub   

Sub FavContacts2_ItemClick (Position As Int, Value As Object)
   If ContactsList.Visible=True Then
      'Remove current contact
      FavContacts2.RemoveAt(Position)
      SortMyContacts
      
   Else
      'Contact selected for SMS
      Dim values() As String
      values = Regex.Split("[ - ]", Value)
      cName=values(0)
      cNumber=values(1)
   End If
   
End Sub

Sub activity_KeyPress (KeyCode As Int) As Boolean
   'Catch the back button. Delete old favourites and save new file
   If KeyCode = KeyCodes.KEYCODE_BACK Then
      If File.Exists(File.DirRootExternal,"qSMS-MyContacts.lst") Then
         File.Delete(File.DirRootExternal,"qSMS-MyContacts.lst")
      End If
      
      Dim MyList As List
      MyList.Initialize
      For c=0 To FavContacts2.Size-1
         MyList.Add(FavContacts2.GetItem(c))
      Next   
      
      File.WriteList(File.DirRootExternal,"qSMS-MyContacts.lst",MyList)
      
      Main.ContactsChanged=True
      Activity.Finish
      
   End If

End Sub

Regards
Mark
 
Upvote 0
Top