2012-11-06 50 views
0

我想從autocompletetextview中選擇多個聯繫人。但是現在我只能選擇一個聯繫人。爲什麼在AutoCompleteTextView中只選擇一個聯繫人?

代碼如下。

MainActivity.java

public class MainActivity extends Activity { 

private ArrayList<Map<String, String>> mPeopleList; 
private SimpleAdapter mAdapter; 
private AutoCompleteTextView mTxtPhoneNo; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mPeopleList = new ArrayList<Map<String, String>>(); 
    PopulatePeopleList(); 
    mTxtPhoneNo = (AutoCompleteTextView) findViewById(R.id.mmWhoNo); 
    mAdapter = new SimpleAdapter(this, mPeopleList, R.layout.custcontview, 
      new String[] { "Name", "Phone", "Type" }, new int[] { 
        R.id.ccontName, R.id.ccontNo, R.id.ccontType }); 
    mTxtPhoneNo.setAdapter(mAdapter); 



    mTxtPhoneNo.setOnItemClickListener(new OnItemClickListener() { 


     public void onItemClick(AdapterView<?> av, View arg1, int index, 
       long arg3) { 
      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); 
} 

public void onItemClick(AdapterView<?> av, View v, int index, long arg){ 
    Map<String, String> map = (Map<String, String>) av.getItemAtPosition(index); 
    Iterator<String> myVeryOwnIterator = map.keySet().iterator(); 
    while(myVeryOwnIterator.hasNext()) { 
     String key=(String)myVeryOwnIterator.next(); 
     String value=(String)map.get(key); 
     mTxtPhoneNo.setText(value); 
    } 
} 


} 

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<AutoCompleteTextView 
    android:id="@+id/mmWhoNo" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:hint="To...." 
    android:textColor="#A5AA0000" 
    > 
</AutoCompleteTextView> 

</LinearLayout> 

custcontview.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<TextView 
    android:id="@+id/ccontName" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Large Text" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:textColor="#A5AA0000" /> 

<TextView 
    android:id="@+id/ccontNo" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@id/ccontName" 
    android:text="Medium Text" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:textColor="#A5AA0000" /> 

<TextView 
    android:id="@+id/ccontType" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@id/ccontNo" 
    android:layout_alignParentRight="true" 
    android:layout_marginRight="14dp" 
    android:text="Small Text" 
    android:textAppearance="?android:attr/textAppearanceSmall" 
    android:textColor="#A5AA0000" /> 
</LinearLayout> 

AndroidManifest.xml中

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

回答

0

而不是寫選擇使用的ListView多觸點的邏輯,我們可以簡單地使用MultiAutoCompleteTextView。代碼與AutoCompleteTextView相同。通過這個我們可以選擇多個聯繫人。

+0

我用你的建議。但是現在沒有選擇聯繫人的列表視圖。 –

0

改爲使用MultiAutoCompleteTextView

mTxtPhoneNo = (MultiAutoCompleteTextView) findViewById(R.id.mmWhoNo); 
mTxtPhoneNo.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer()); 

希望它有幫助!

相關問題