2012-01-27 74 views
4

我有我的edittext字段自动完成联系人的电话号码。我知道如何从数据库中获取联系人并将其显示在文本字段中,但我需要他们自动完成,以便用户想要在文本字段中输入名称。我明白如何让数组自动完成,以及背后的全部理论。但是如何从手机通讯录中拉出很困难。我已经看过很多教程,还有关于堆栈溢出的各种问题,但仍然很难。代码snippit将有助于请。使用自动完成textview与联系人电话号码

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

    } 

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

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

我的代码...没有编译错误,但仍然无法正常工作

+0

你能表达一下你想做什么吗? – Richa 2012-01-27 05:19:20

+0

东西非常类似,对任何Android手机标准的自动完成textview,当你短信 – 2012-01-27 18:27:14

+0

你解决了你的问题?如果解决然后发布你的答案并接受它... – nKandel 2012-09-24 03:47:07

回答

3
更好

将获取联系人并将其存储在ArrayList。然后,您可以将ArrayList与AutoComplete TextView绑定。然后,当用户键入AutoComplete TextView时,该部分的其余部分很容易过滤ArrayList。

UPDATE

您可以创建一个POJO类与contact_namecontact_number消气制定者。然后创建List<POJO> list = new ArrayList<POJO>();。然后,只需将CONTACT_NAME和contact_number添加到list使用POJO

POJO pojo_obj = new POJO(); 
pojo_obj.setcontact_name(contactname); 
pojo_obj.setcontact_number(cphoneNumber); 
list.add(pojo_obj); 

最后设置此listAdapter

然后在适配器类,你可以用它

list.get(position).getcontact_name(); 
list.get(position).getcontact_number(); 
+0

我发布了我的代码,你觉得你可能能告诉我你的意思吗? – 2012-01-30 01:27:03

+0

我编辑了我的答案。 – 2012-01-30 04:55:11

+0

谢谢,生病试试。我会张贴在这里,并告诉你,如果它的工作 – 2012-02-02 03:58:54

2

它可能提供的电话号码或联系人姓名时,适配器自动完成文本视图。

下面的链接为您提供了一个很好的教程来达到这个要求。

Fetch Phone contacts and Show it in AutoComplete TextView in Android

+0

我张贴我的代码。它似乎仍然不起作用,但没有编译错误。 – 2012-01-30 01:28:12

0

我想你在SDK正在测试设置为TextView的。 SDK没有SIM卡,因此无法工作。将.APK放入手机中,然后重试。它应该像魅力一样工作。

+0

我一直在测试它对我的htc启发。它没有工作?如果你尝试过它,它是否适合你?如果它对你有用,那么这将有所帮助。 – 2012-02-19 20:22:41

+0

是的,在我的三星Galaxy 3 Android 2.1中为我工作。 顺便说一句,你可以尝试这个网页,有更好的方式提取联系人.. [这个链接是一个上帝的工作](http://coderzheaven.com/2011/06/get-all-details-from-contacts-在-机器人/) – 2012-02-20 16:55:06

相关问题