2012-08-13 17 views
5

Necesito mostrar un cuadro de texto autocompletar que básicamente cargará los correos electrónicos de los contactos. Lo he probado usando un adaptador personalizado pero nada se llena en el cuadro de texto. Sin sugerencias en absoluto. Cualquier solución será muy útil.Autocompletar TextView con contactos

+2

Por favor, publicar algunos de su código, de modo que podamos ayudarle mejor –

+0

leer este post http: // stackoverflow.com/questions/11879078/search-list-in-our-application-in-android/11879375#11879375 esto te ayudará – Akshay

Respuesta

9

Pruebe lo siguiente:

ArrayList<String> emailAddressCollection = new ArrayList<String>(); 

ContentResolver cr = getContentResolver(); 

Cursor emailCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, null, null, null); 

while (emailCur.moveToNext()) 
{ 
    String email = emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 
      emailAddressCollection.add(email); 
} 
emailCur.close(); 

String[] emailAddresses = new String[emailAddressCollection.size()]; 
emailAddressCollection.toArray(emailAddresses); 

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_dropdown_item_1line, emailAddresses); 
AutoCompleteTextView textView = (AutoCompleteTextView)findViewById(R.id.YOUR_TEXT_VIEW); 
    textView.setAdapter(adapter); 
} 

Nota: No se olvide de agregar el permiso READ_CONTACTS a su Manifest.xml:

<uses-permission android:name="android.permission.READ_CONTACTS" /> 
+0

¡¡¡Estoy haciendo algo similar AQUÍ !! stackoverflow.com/questions/12854336/autocompletetextview-backed-by-cursorloader – toobsco42

0

@Korhan sin duda es una manera elegante de lo mucho lo que descubrí. Mi código funciona, pero @ Korhan es mucho más simple. Gracias. He creado esta clase adaptador personalizado para la lectura de los contactos

class ContactListAdapter extends CursorAdapter implements Filterable { 
     private ContentResolver mCR; 

     public ContactListAdapter(Context context, Cursor c,boolean a) { 
      super(context, c, true); 
      mCR = context.getContentResolver(); 
     } 


     @Override 
     public void bindView(View view, Context context, Cursor cursor) { 


       ((TextView) view).setText(cursor.getString(1)); 
     } 


     @Override 
     public View newView(Context context, Cursor cursor, ViewGroup parent) { 
      final LayoutInflater inflater = LayoutInflater.from(context); 
       final TextView view = (TextView) inflater.inflate(android.R.layout.simple_dropdown_item_1line, parent, false); 


       view.setText(cursor.getString(1)); 

       return view; 

     } 
     @Override 
     public String convertToString(Cursor cursor) { 



      return cursor.getString(1); 
     } 
     public Cursor runQueryOnBackgroundThread(CharSequence constraint) { 
      if (getFilterQueryProvider() != null) { 
       return getFilterQueryProvider().runQuery(constraint); 
     } 

     StringBuilder buffer = null; 
     String[] args = null; 
     if (constraint != null) { 
      buffer = new StringBuilder(); 
      buffer.append("UPPER("); 
      buffer.append(ContactsContract.CommonDataKinds.Email.ADDRESS); 
      buffer.append(") GLOB ?"); 
      args = new String[] { constraint.toString().toUpperCase() + "*" }; 
     } 

     return mCR.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,CreateEventActivity.PEOPLE_PROJECTION ,buffer == null ? null : buffer.toString(), args, 
       null); 
     } 

    } 

y la actividad principal:

MultiAutoCompleteTextView act = (MultiAutoCompleteTextView)findViewById(R.id.attende_list); 
ContentResolver content = getContentResolver(); 
Cursor cursor = content.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,PEOPLE_PROJECTION, null, null, null); 
ContactListAdapter adapter = new ContactListAdapter(this, cursor, true); 
act.setThreshold(0); 
act.setAdapter(adapter); 
act.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer()); 
Cuestiones relacionadas