多个自动完成文本联系人

时间:2013-08-26 11:42:32

标签: android contacts

我想这样做MultiAutoCompleteTextView

我可以检索数组中的联系人号码和数组中的名称。我该怎么做MultiAutoCompleteTextView?例如,在图片中,如果您输入ca,则会有一个建议,如果您输入22,则会有相同的建议,并且它们位于另一个建议之下。我有两个数组numbers[]names[],一个MultiAutoCompleteTextView

这是我的代码:

Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
ArrayList<String> numbers = new ArrayList<String>();
ArrayList<String> names = new ArrayList<String>();

while (phones.moveToNext())
{
     names.add(phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)));
     numbers.add(phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));
}
phones.close();
String[] numbersArray = new String[numbers.size()];
String[] namesArray = new String[names.size()];
numbers.toArray(numbersArray);
names.toArray(namesArray);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
         android.R.layout.simple_dropdown_item_1line, namesArray);
MultiAutoCompleteTextView textView = (MultiAutoCompleteTextView)findViewById(R.id.edt_numara);

textView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
textView.setAdapter(adapter);

但它仅适用于姓名和数字不显示。

1 个答案:

答案 0 :(得分:0)

步骤1.在xml文件中创建自动完成,如下所示

<AutoCompleteTextView android:paddingTop="15dp"
android:id="@+id/txtPhoneNo"
android:focusableInTouchMode="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:imeOptions="actionDone"/>

步骤2.在Android Mainfeast文件中添加以下权限以访问联系人

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

步骤3.创建一个Activity并将autocompletetextview组件映射到Java代码

public class MyContacts extends Activity {

AutoCompleteTextView txtPhoneNo;


public ArrayList<String> c_Name = new ArrayList<String>();
public ArrayList<String> c_Number = new ArrayList<String>();
String[] name_Val=null;
String[] phone_Val=null;

@Override
public void onCreate(Bundle icicle)
{
super.onCreate(icicle);
txtPhoneNo = (AutoCompleteTextView) findViewById(R.id.txtPhoneNo);

}

步骤4:使用ContentReslover获取联系人,如果您在Android 1.6中运行它,或者在版本之前使用人员类获取联系人并将这些联系人添加到数组列表中,如下所示

ContentResolver cr1 = getContentResolver();

String[] projection = new String[] { People._ID,People.NAME,People.NUMBER };

Uri phone_contacts = People.CONTENT_URI;

Cursor managedCursor = cr1.query(phone_contacts, projection, null, null, People.NAME + " ASC");

if (managedCursor.moveToFirst()) {

String contactname;
String cphoneNumber;
int nameColumn = managedCursor.getColumnIndex(People.NAME);
int phoneColumn = managedCursor.getColumnIndex(People.NUMBER);
Log.d("int Name",Integer.toString(nameColumn));
Log.d("int Number",Integer.toString(phoneColumn));


do {
// Get the field values
contactname = managedCursor.getString(nameColumn);
cphoneNumber = managedCursor.getString(phoneColumn);
if((contactname != " " || contactname != null) && (cphoneNumber!= " " ||cphoneNumber!= null))
{

c_Name.add(contactname);
c_Number.add(cphoneNumber);
}


} while (managedCursor.moveToNext());

}


// Donot use People class if your using android1.6 above

Uri contacts = Uri.parse("content://icc/adn");

Cursor managedCursor1 =cr.query(contacts, null, null, null, null);

if (managedCursor1.moveToFirst()) {

String contactname;
String cphoneNumber;

int nameColumn = managedCursor1.getColumnIndex("name");
int phoneColumn = managedCursor1.getColumnIndex("number");

Log.d("int Name",Integer.toString(nameColumn));
Log.d("int Number",Integer.toString(phoneColumn));


do {
// Get the field values
contactname = managedCursor1.getString(nameColumn);
cphoneNumber = managedCursor1.getString(phoneColumn);
if((contactname != " " || contactname != null) && (cphoneNumber!= " " ||cphoneNumber!= null))
{

c_Name.add(contactname);
c_Number.add(cphoneNumber);
}

} while (managedCursor1.moveToNext());

}

步骤5:现在将ArrayList转换为Array并将该Array设置为AutoComplete,如下所示

name_Val = (String[]) c_Name.toArray(new String[c_Name.size()]);
phone_Val= (String[]) c_Number.toArray(new String[c_Name.size()]); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line, name_Val);
txtPhoneNo.setAdapter(adapter);
相关问题