2012-08-13 10 views
5

Ho bisogno di visualizzare una casella di testo di completamento automatico che fondamentalmente caricherà gli ID e-mail dei contatti. L'ho provato usando un adattatore personalizzato ma nulla viene popolato nella casella di testo. Nessun suggerimento. Qualsiasi soluzione sarà molto utile.TextView automatico completo con contatti

+2

si prega di inviare alcuni di codice, in modo che possiamo aiutarti meglio –

+0

leggere questo post http: // stackoverflow.com/questions/11879078/search-list-in-our-application-in-android/11879375#11879375 questo ti aiuterà – Akshay

risposta

9

Provare quanto segue:

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: Non dimenticare di aggiungere l'autorizzazione READ_CONTACTS al Manifest.xml:

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

Sto facendo qualcosa di simile QUI !! stackoverflow.com/questions/12854336/autocompletetextview-backed-by-cursorloader – toobsco42

0

@Korhan sicuramente è un modo molto più elegante rispetto quello che ho capito.Il mio codice funziona ma @ Korhan è molto più semplice.Grazie. Ho creato questa classe adattatore personalizzato per la lettura dei contatti

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); 
     } 

    } 

e le principali attività:

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());