2012-08-13 14 views
5

Ich muss ein Auto-Vervollständigen-Textfeld anzeigen, das im Grunde die Kontakte E-Mail-IDs lädt. Ich habe es mit einem benutzerdefinierten Adapter versucht, aber nichts wird in das Textfeld gefüllt. Keine Vorschläge. Jede Lösung wird sehr nützlich sein.AutoComplete TextView mit Kontakten

+2

Bitte einige Code schreiben, damit wir Ihnen helfen können, besser –

+0

diesen Beitrag http lesen: // stackoverflow.com/questions/11879078/search-list-in-our-application-in-android/11879375#11879375 dies wird Ihnen helfen – Akshay

Antwort

9

Versuchen Sie Folgendes:

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

Hinweis: Vergessen Sie nicht, die READ_CONTACTS Erlaubnis zu Ihrem Manifest.xml hinzuzufügen:

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

Ich mache etwas ähnliches hier !! stackoverflow.com/questions/12854336/autocompletedtextview-backed-by-cursorloader – toobsco42

0

@Korhan sicherlich eine viel elegante Art und Weise als was ich herausgefunden habe. Mein Code funktioniert, aber @ Korhans ist viel einfacher. Danke. Ich habe diese benutzerdefinierten Adapterklasse für die Kontakte zu lesen

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

    } 

und die Hauptaktivität:

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