1

こんにちは、アプリケーションにオートコンプリートテキストビューがあります。モバイルに保存されている連絡先を取得しています。問題は、オートコンプリートテキストビューから連絡先を 1 つしか選択できないことですが、複数の連絡先を選択して、メッセージのようにオートコンプリートテキストビューに表示する必要があります。これを行う方法は?

次のコードを使用しています:

@Override
    public void afterTextChanged(Editable arg0) {

    }

    @Override
    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
            int arg3) {

    }

    @Override
    public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {

        Cursor c = getContentResolver().query(Phone.CONTENT_URI,
                PHONE_PROJECTION, null, null, null);
        startManagingCursor(c);

        ContactListAdapter adapter = new ContactListAdapter(this, R.layout.row,
                c,
                new String[] { Phone.DISPLAY_NAME, Phone.TYPE, Phone.NUMBER },
                new int[] { R.id.textName, R.id.textType, R.id.textPhone });

        adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {

            @Override
            public boolean setViewValue(View view, Cursor cursor,
                    int columnIndex) {
                if (columnIndex != 2) {
                    return false;
                }

                int type = cursor.getInt(2);

                if (type == Phone.TYPE_CUSTOM) {
                    cursor.getString(3);
                }

                String text = (String) Phone.getTypeLabel(getResources(), type,
                        null);

                ((TextView) view).setText(text);

                return true;
            }
        });
        autoTo.setAdapter(adapter);
    }

    private static class ContactListAdapter extends SimpleCursorAdapter  {

        public static ContentResolver mContent;

        public ContactListAdapter(Context context, int layout, Cursor c,
                String[] from, int[] to) {

            super(context, layout, c, from, to);
            mContent = context.getContentResolver();
        }

        @Override
        public CharSequence convertToString(Cursor cursor) {
            int namCol = cursor.getColumnIndexOrThrow(Phone.DISPLAY_NAME);
            int numCol = cursor.getColumnIndex(Phone.NUMBER);

            return cursor.getString(namCol) + " <" + cursor.getString(numCol)
                    + ">";
        }

        @Override
        public Cursor runQueryOnBackgroundThread(CharSequence constraint) {
            FilterQueryProvider filter = getFilterQueryProvider();

            if (filter != null) {
                return filter.runQuery(constraint);
            }

            Uri uri = Uri.withAppendedPath(Phone.CONTENT_FILTER_URI,
                    Uri.encode(constraint.toString()));
            return mContent.query(uri, PHONE_PROJECTION, null, null, null);
        }
    }
4

1 に答える 1

2

を使用して複数の連絡先を選択するためのロジックを作成する代わりに、ListView単純に使用できMultiAutoCompleteTextViewます。コードは。の場合と同じです。AutoCompleteTextViewこれにより、複数の連絡先を選択できます。

于 2012-08-10T11:33:51.077 に答える