Android – Autocompletar con contactos

He creado un cuadro AutoCompleteTextView que muestra los nombres de todos los contactos, pero después de buscar en las API de Android, parece que mi método es probablemente bastante ineficiente.

Actualmente estoy agarrando un cursor de todos los contactos, colocando cada nombre y cada identificador de contacto en dos matrices diferentes, pasando la matriz de nombres a AutoCompleteTextView. Cuando un usuario selecciona un elemento, busco que ID el contacto seleccionado en la segunda matriz de id creado anteriormente. Código abajo:

private ContactNames mContactData; // Fill the autocomplete textbox Cursor contactsCursor = grabContacts(); mContactData = new ContactNames(contactsCursor); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.contact_name, mContactData.namesArray); mNameText.setAdapter(adapter); private class ContactNames { private String[] namesArray; private long[] idsArray; private ContactNames(Cursor cur) { namesArray = new String[cur.getCount()]; idsArray = new long[cur.getCount()]; String name; Long contactid; // Get column id's int nameColumn = cur.getColumnIndex(People.NAME); int idColumn = cur.getColumnIndex(People._ID); int i=0; cur.moveToFirst(); // Check that there are actually any contacts returned by the cursor if (cur.getCount()>0){ do { // Get the field values name = cur.getString(nameColumn); contactid = Long.parseLong(cur.getString(idColumn)); // Do something with the values. namesArray[i] = name; idsArray[i] = contactid; i++; } while (cur.moveToNext()); } } private long search(String name){ // Lookup name in the contact list that we've put in an array int indexOfName = Arrays.binarySearch(namesArray, name); long contact = 0; if (indexOfName>=0) { contact = idsArray[indexOfName]; } return contact; } } private Cursor grabContacts(){ // Form an array specifying which columns to return. String[] projection = new String[] {People._ID, People.NAME}; // Get the base URI for the People table in the Contacts content provider. Uri contacts = People.CONTENT_URI; // Make the query. Cursor managedCursor = managedQuery(contacts, projection, null, null, People.NAME + " ASC"); // Put the results in ascending order by name startManagingCursor(managedCursor); return managedCursor; } 

Debe haber una manera mejor de hacer esto – básicamente estoy luchando para ver cómo puedo encontrar qué artículo seleccionó un usuario en un AutoCompleteTextView. ¿Algunas ideas?

Aclamaciones.

3 Solutions collect form web for “Android – Autocompletar con contactos”

Construya su propio adaptador de cursor y úselo para AutoCompleteTextView.

Hay una función convertToString () en CursorAdapter que necesita sobrescribir para obtener los detalles que desea que se muestren en TextView. Le dará el cursor que apunta a la posición seleccionada como un parámetro.

Espero que esto ayude.

Si todavía tiene la instancia de esa clase debe ser capaz de buscar a través de la matriz que utilizó en el adaptador para recopilar la información que necesita.

  • AutocompleteTextView: en "NEXT" resalte el siguiente TextView, en "DONE", haga que el teclado desaparezca
  • Autocompletar la búsqueda en un solo carácter android
  • Auto texto completo restante en la pantalla
  • Cómo utilizar el API AutocompleteFilter de Android Places
  • Sugerencias de EditText y MultiAutoCompleteTextView
  • Utilizar un adaptador de lista personalizado con AutoCompleteTextView y mantener la funcionalidad del auto completo trabajando igual
  • Autocompletar no funciona en archivos XML en una jerarquía particular
  • Imagen y texto de texto de Autocompletar de Custom de Android
  • Cómo ocultar los recursos de android.R en Android Studio 1.3+ autocomplete
  • AutocompleteTextView de Android con ArrayAdapter y Filter
  • Los espacios no funcionan cuando se utiliza la API de autocompletar de Google Places
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.