AutoComplete TextView with Contacts

前端 未结 2 1890
不知归路
不知归路 2020-12-29 16:37

i need to display an auto complete text box which will basically load the contacts e-mail ids. I have tried it using a custom adapter but nothing gets populated in the textb

相关标签:
2条回答
  • 2020-12-29 17:16

    @Korhan surely is a much elegant way than what I figured out.My code works but @Korhan's is much simpler.Thank you. I created this custom adapter class for reading the contacts

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

    And the main Activity:

    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());
    
    0 讨论(0)
  • 2020-12-29 17:21

    Try the following:

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

    Note: Don't forget to add the READ_CONTACTS permission to your Manifest.xml:

    <uses-permission android:name="android.permission.READ_CONTACTS" />
    
    0 讨论(0)
提交回复
热议问题