Android MultiAutoCompleteTextView可检索多个联系人

Android MultiAutoCompleteTextView可检索多个联系人,android,android-arrayadapter,autocompletetextview,contactscontract,Android,Android Arrayadapter,Autocompletetextview,Contactscontract,我试图修改我在stackoverflow上看到的AutoCompleteTextView的代码,以便为MultiAutoCompleteTextView返回多个联系人 然而,当我把它加载到我的Android手机上时,我再也看不到任何可供选择的建议。我感觉问题在于ArrayAdapter初始化,但我无法找出它的错误 提前感谢您的帮助 我的multiautocompletetextview有以下代码: <MultiAutoCompleteTextView android:id="

我试图修改我在stackoverflow上看到的AutoCompleteTextView的代码,以便为MultiAutoCompleteTextView返回多个联系人

然而,当我把它加载到我的Android手机上时,我再也看不到任何可供选择的建议。我感觉问题在于ArrayAdapter初始化,但我无法找出它的错误

提前感谢您的帮助

我的multiautocompletetextview有以下代码:

  <MultiAutoCompleteTextView
     android:id="@+id/mmWhoNo"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:textColor="#0000A0"
     android:hint="Choose your Contacts" />
最后,我有下面的内容来阅读我的联系人,我对这些联系人做了一些修改

private ArrayList<Map<String, String>> mPeopleList;
private ArrayAdapter mAdapter;
private MultiAutoCompleteTextView mTxtPhoneNo;

      mPeopleList = new ArrayList<Map<String, String>>();
      PopulatePeopleList(); 
     mTxtPhoneNo = (MultiAutoCompleteTextView) findViewById(R.id.mmWhoNo);
     mTxtPhoneNo.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer()); 
     mTxtPhoneNo.setThreshold(1);

             //just to check to see that mPeopleList is being populated
     Log.i("Multiplecontacts",mPeopleList.get(0).toString());


     mAdapter = new ArrayAdapter<ArrayList<Map<String,String>>>(this, android.R.layout.simple_dropdown_item_1line);
     mAdapter.add(mPeopleList);

     mTxtPhoneNo.setAdapter(mAdapter);

    mTxtPhoneNo
            .setOnItemClickListener(new OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> av, View arg1,
                        int index, long arg3) {
                    // TODO Auto-generated method stub
                    Map<String, String> map = (Map<String, String>) av
                            .getItemAtPosition(index);

                    String name = map.get("Name");
                    String number = map.get("Phone");
                    mTxtPhoneNo.setText("" + name + "<" + number + ">,");

                }


public void PopulatePeopleList() {
    mPeopleList.clear();
    Cursor people = getContentResolver().query(
            ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
    while (people.moveToNext()) {
        String contactName = people.getString(people
                .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
        String contactId = people.getString(people
                .getColumnIndex(ContactsContract.Contacts._ID));
        String hasPhone = people
                .getString(people
                        .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));

        if ((Integer.parseInt(hasPhone) > 0)) {
            // You know have the number so now query it like this
            Cursor phones = getContentResolver().query(
                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                    null,
                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                            + " = " + contactId, null, null);
            while (phones.moveToNext()) {
                // store numbers and display a dialog letting the user
                // select which.
                String phoneNumber = phones
                        .getString(phones
                                .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                String numberType = phones
                        .getString(phones
                                .getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
                Map<String, String> NamePhoneType = new HashMap<String, String>();
                NamePhoneType.put("Name", contactName);
                NamePhoneType.put("Phone", phoneNumber);
                if (numberType.equals("0"))
                    NamePhoneType.put("Type", "Work");
                else if (numberType.equals("1"))
                    NamePhoneType.put("Type", "Home");
                else if (numberType.equals("2"))
                    NamePhoneType.put("Type", "Mobile");
                else
                    NamePhoneType.put("Type", "Other");
                // Then add this map to the list.
                mPeopleList.add(NamePhoneType);
            }
            phones.close();
        }
    }
    people.close();
    startManagingCursor(people);
}

            });

您遇到的问题是因为您使用的是ArrayAdaptor。您为它提供了一个要选择表单的地图列表,但没有关于如何过滤或比较地图对象与输入文本的数据。我用了一个SimpleAdapter,它工作得很好

mTxtPhoneNo = (MultiAutoCompleteTextView) findViewById(R.id.multiAutoCompleteTextViewContactsNames);
mAdapter = new SimpleAdapter(this, mPeopleList, R.layout.costom_contact_view, new String[] { "Name", "Phone", "Type" }, new int[] {
                             R.id.ccontName, R.id.ccontNo, R.id.ccontType });
mTxtPhoneNo.setThreshold(1);
mTxtPhoneNo.setAdapter(mAdapter);
mTxtPhoneNo.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
mTxtPhoneNo.setOnItemClickListener(multiAutoContactNamesListener);
此外,在您的应用程序中,请确保连接联系人的名称。 更改:

致:


希望这有帮助。

您遇到的问题是因为您使用的是ArrayAdaptor。您为它提供了一个要选择表单的地图列表,但没有关于如何过滤或比较地图对象与输入文本的数据。我用了一个SimpleAdapter,它工作得很好

mTxtPhoneNo = (MultiAutoCompleteTextView) findViewById(R.id.multiAutoCompleteTextViewContactsNames);
mAdapter = new SimpleAdapter(this, mPeopleList, R.layout.costom_contact_view, new String[] { "Name", "Phone", "Type" }, new int[] {
                             R.id.ccontName, R.id.ccontNo, R.id.ccontType });
mTxtPhoneNo.setThreshold(1);
mTxtPhoneNo.setAdapter(mAdapter);
mTxtPhoneNo.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
mTxtPhoneNo.setOnItemClickListener(multiAutoContactNamesListener);
此外,在您的应用程序中,请确保连接联系人的名称。 更改:

致:


希望这能有所帮助。

我所做的是,我创建了一个名为ContactsInfo的类,然后创建了一个ArrayAdapter,而不是将ArrayList用于ArrayAdapter类型

同样地,我把我的ArrayList改成了ArrayList,它成功了


您还必须覆盖ContactsInfo类中的toString方法。

我所做的是,我创建了一个名为ContactsInfo的类,然后创建了一个ArrayAdapter,而不是将ArrayList用于ArrayAdapter类型

同样地,我把我的ArrayList改成了ArrayList,它成功了


此外,您还必须覆盖ContactsInfo类中的toString方法。

我遵循了与您提供的示例相同的方法,该方法工作正常。但问题是,它不显示逗号。我必须手动添加它。我遵循了与您提供的相同的示例,并且工作正常。但问题是,它不显示逗号。我必须手动添加它。
mTxtPhoneNo.append(", " + name + " <" + number + ">");