2014-01-10 65 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

你得到的錯誤/堆棧跟蹤是什麼? –

相關問題