2014-01-10 34 views
0

我需要一些帮助,以获得一个联系人选择器类。 该类检索联系人列表并允许我选择一个,但是当我去选择另一个时,它只是替换第一个。 我想在我的应用程序中创建联系人列表,而不仅仅是一个。联系选取器代码

谢谢 诺姆

验证码:

public static final int PICK_CONTACT = 1; 

@Override 
public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.activity_main); 

    Button btnPickContact = (Button) findViewById(R.id.btnPickContact); 
    btnPickContact.setOnClickListener(new OnClickListener() { 
     public void onClick(View _view) { 
      Intent intent = new Intent(Intent.ACTION_PICK, 
        ContactsContract.CommonDataKinds.Phone.CONTENT_URI); 
      startActivityForResult(intent, PICK_CONTACT); 
     } 
    }); 

} 



@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    switch (requestCode) { 
    case (PICK_CONTACT): { 
     if (resultCode == Activity.RESULT_OK) { 
      Uri contentUri = data.getData(); 
      //Phone Name 
      Cursor c = managedQuery(contentUri, null, null, null, null); 
      c.moveToFirst(); 
      String name = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); 
      //Phone Number 
      String contactId = contentUri.getLastPathSegment(); 
      Cursor cursor = getContentResolver().query(Phone.CONTENT_URI, 
        null, Phone._ID + "=?", new String[] { contactId }, 
        null);// < - Note, not CONTACT_ID! 
      startManagingCursor(cursor); 
      Boolean numbersExist = cursor.moveToFirst(); 
      int phoneNumberColumnIndex = cursor 
        .getColumnIndex(Phone.NUMBER); 
      String phoneNumber = ""; 
      while (numbersExist) { 
       phoneNumber = cursor.getString(phoneNumberColumnIndex); 
       phoneNumber = phoneNumber.trim(); 
       numbersExist = cursor.moveToNext(); 
      } 
      stopManagingCursor(cursor); 
      //Set 
      TextView tv = (TextView) findViewById(R.id.txtSelContact); 
      tv.setText(name + "-" + phoneNumber); 
     } 
     break; 
    } 
    } 
} 

}

这里是上创建功能:

public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.activity_main); 

    Button btnPickContact = (Button) findViewById(R.id.btnPickContact); 
    btnPickContact.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View _view) { 
      Intent intent = new Intent(Intent.ACTION_PICK, 
        ContactsContract.CommonDataKinds.Phone.CONTENT_URI); 
      startActivityForResult(intent, PICK_CONTACT); 
     } 
    }); 

    //you may fill it here e.g. from your db 
    contactList=new ArrayList<String>(); 

    arrayAdapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, contactList); 

    final ListView lv = (ListView) findViewById(R.id.ContactListView); 
    lv.setAdapter(arrayAdapter); 

} 

这是layout.xml(由于某种原因,它不让我发布代码,所以我链接到一个图像):

https://imagizer.imageshack.us/v2/516x255q90/4/igi5.png

行29 - 35:

btnPickContact.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View _view) { 
      Intent intent = new Intent(Intent.ACTION_PICK, 
        ContactsContract.CommonDataKinds.Phone.CONTENT_URI); 
      startActivityForResult(intent, PICK_CONTACT); 
     } 
    }); 

回答

0

据我看到你写结果到相同的TextView:

//Set 
TextView tv = (TextView) findViewById(R.id.txtSelContact); 
tv.setText(name + "-" + phoneNumber); 

你可以在你的布局指定列表视图

<ListView 
    android:id="@+id/ContactListView" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" > 
</ListView> 

并使用arrayadapter将您的结果添加到此列表视图中:

public class MainActivity extends Activity { 
    public static final int PICK_CONTACT = 1; 
    private ArrayList<String> contactList; 
    private ArrayAdapter<String> arrayAdapter; 

    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.activity_main); 

     Button btnPickContact = (Button) findViewById(R.id.btnPickContact); 
     btnPickContact.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View _view) { 
       Intent intent = new Intent(Intent.ACTION_PICK, 
         ContactsContract.CommonDataKinds.Phone.CONTENT_URI); 
       startActivityForResult(intent, PICK_CONTACT); 
      } 
     }); 

     //you may fill it here e.g. from your db 
     contactList=new ArrayList<String>(); 

     arrayAdapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, contactList); 

     final ListView lv = (ListView) findViewById(R.id.contactListView); 
     lv.setAdapter(arrayAdapter); 

    } 



    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     switch (requestCode) { 
     case (PICK_CONTACT): { 
      if (resultCode == Activity.RESULT_OK) { 
       Uri contentUri = data.getData(); 
       //Phone Name 
       Cursor c = managedQuery(contentUri, null, null, null, null); 
       c.moveToFirst(); 
       String name = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); 
       //Phone Number 
       String contactId = contentUri.getLastPathSegment(); 
       Cursor cursor = getContentResolver().query(Phone.CONTENT_URI, 
         null, Phone._ID + "=?", new String[] { contactId }, 
         null);// < - Note, not CONTACT_ID! 
       startManagingCursor(cursor); 
       Boolean numbersExist = cursor.moveToFirst(); 
       int phoneNumberColumnIndex = cursor 
         .getColumnIndex(Phone.NUMBER); 
       String phoneNumber = ""; 
       while (numbersExist) { 
        phoneNumber = cursor.getString(phoneNumberColumnIndex); 
        phoneNumber = phoneNumber.trim(); 
        numbersExist = cursor.moveToNext(); 
       } 
       stopManagingCursor(cursor); 
       //Set 
       arrayAdapter.add(name + "-" + phoneNumber); 
       arrayAdapter.notifyDataSetChanged(); 
      } 
      break; 
     } 
     } 
    } 
} 
+0

谢谢,它的工作原理。我真的需要添加的另一件事是在我的应用程序中调用,发送消息或通过电子邮件发送来自该活动的联系人的能力。我怎样才能做到这一点 ? –

+0

有些事情是错误的,当我在不同的库上运行它自己的活动时,但是当我将它添加到我的应用程序库并通过应用程序打开活动时,它会崩溃。我能做什么 ? –

+0

你得到的错误/堆栈跟踪是什么? –

相关问题