4

基本的に連絡先の電子メールIDをロードするオートコンプリートテキストボックスを表示する必要があります。カスタム アダプターを使用して試してみましたが、テキスト ボックスに何も入力されません。提案はまったくありません。どんな解決策も非常に役に立ちます。

4

2 に答える 2

9

次のことを試してください。

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

注:READ_CONTACTS Manifest.xmlにアクセス許可を追加することを忘れないでください。

<uses-permission android:name="android.permission.READ_CONTACTS" />
于 2012-08-13T14:24:58.723 に答える
0

@Korhanは確かに私が考え出したものよりもはるかにエレガントな方法です.私のコードは機能しますが、@Korhanのものははるかに単純です.ありがとう. 連絡先を読み取るために、このカスタム アダプター クラスを作成しました

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

    }

そして主な活動:

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());
于 2012-08-13T20:45:54.370 に答える