2012-11-02 69 views
0

我一直在開發一個聯繫人應用程序,它允許:呼叫,短信,刪除等...和編輯聯繫人。當用戶點擊並按住某個聯繫人時,會顯示一個上下文菜單(如下圖所示)。行動電話,短信,...已完成,但編輯不是。請給我一些代碼或建議。在此先感謝如何從上下文菜單編輯聯繫人

Image is here

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
    switch (item.getItemId()) { 
     case R.id.call: 
      //do something 
      String mPhoneNumber = "tel:" + getPhoneNumber(mRecordId); 
      Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(mPhoneNumber)); 
      startActivity(intent); 
      return true; 

     case R.id.message: 
      //do something 
      String mSmsNumber = getPhoneNumber(mRecordId); 
      startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("sms:" + mSmsNumber))); 
      return true; 

     case R.id.sendemail: 
      //do something 
      return true; 
     case R.id.edit: 
      //do something // need help??? 

      return true; 
     case R.id.delete: 
      //do something 
      new AlertDialog.Builder(mContext).setMessage("Do you want to delete this contact?") 
      .setTitle("Delete").setCancelable(false).setPositiveButton("Delete", new DialogInterface.OnClickListener() { 

       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        // TODO Auto-generated method stub 
        deleteContactEntry(mRecordId); 
        populateContactList(); 
       } 
      }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 

       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        // TODO Auto-generated method stub 
        dialog.cancel(); 

       } 
      }).show(); 

      return true; 
     default: 
      return super.onContextItemSelected(item); 
    } 

這裏有方法,我用:

/** 
* Populate the contact list based on account currently selected in the account spinner. 
*/ 
private void populateContactList() { 
    // Build adapter with contact entries 
    Cursor cursor = getContacts(); 
    String[] fields = new String[] { 
      ContactsContract.Data.DISPLAY_NAME 
    }; 
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.contact_entry, cursor, 
      fields, new int[] {R.id.contactEntryText}); 
    mContactList.setAdapter(adapter); 
} 

/** 
* Obtains the contact list for the currently selected account. 
* 
* @return A cursor for for accessing the contact list. 
*/ 
private Cursor getContacts() 
{ 
    // Run query 
    Uri uri = ContactsContract.Contacts.CONTENT_URI; 
    String[] projection = new String[] { 
      ContactsContract.Contacts._ID, 
      ContactsContract.Contacts.DISPLAY_NAME 
    }; 

    String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" + 
      (mShowInvisible ? "0" : "1") + "'"; 


    // String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = 0"; 


    String[] selectionArgs = null; 
    String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"; 

    return managedQuery(uri, projection, selection, selectionArgs, sortOrder); 
} 

/** 
* Launches the ContactAdder activity to add a new contact to the selected accont. 
*/ 
protected void launchContactAdder() { 
    Intent i = new Intent(this, ContactAdder.class); 
    startActivity(i); 
} 

/** 
* Get Phone Number 
*/ 
private String getPhoneNumber(long contactId){ 
    String mPhoneNumber = null; 
    String [] colums = new String[] { ContactsContract.CommonDataKinds.Phone.NUMBER }; 
    String where = ContactsContract.Data.RAW_CONTACT_ID + "=?"; 
    String[] whereParameters = new String[]{Long.toString(contactId)}; 
    Cursor contacts = getContentResolver().query(ContactsContract.Data.CONTENT_URI,colums,where, whereParameters, null); 
     if (contacts.moveToFirst()) { 
       mPhoneNumber = contacts.getString(0); 
      } 
      contacts.close(); 
      return mPhoneNumber; 
} 

/** 
* Delete Contact 
*/ 
private void deleteContactEntry(long contactId){ 
    //String [] projection = new String [] {ContactsContract.RawContacts._ID}; 

    String mSelectionClause = ContactsContract.RawContacts._ID + "=?"; 
    String [] mSelectionArgs = new String [] {Long.toString(contactId)}; 
    getContentResolver().delete(ContactsContract.RawContacts.CONTENT_URI, mSelectionClause, mSelectionArgs); 
} 
+1

你的問題的格式不適合SO。詳細說明爲什麼'編輯'不起作用。添加您當前的代碼或您的問題很快得到downvote和刪除。 –

+0

我修改了我的帖子。請給我一些代碼或建議 –

回答

0

對於編輯功能,您可以使用編輯意圖調用默認的聯繫人應用

Intent i = new Intent(Intent.ACTION_EDIT); 
i.setData(Uri.parse(ContactsContract.Contacts.CONTENT_LOOKUP_URI + "/" + id)); //contact's id 
startActivityForResult(i, idEDIT_CONTACT); 

發送電子郵件看看這個questionthis

+0

謝謝Yul這麼多 –

相關問題