1. 程式人生 > >啟動一個帶返回結果的activity

啟動一個帶返回結果的activity

啟動一個帶返回結果的activity

有時候,你想要啟動一個activity,並從這個activty獲得一個結果。 這時,要通過 startActivityForResult() (取代startActivity()) 來啟動activity。 然後通過實現onActivityResult()回撥方法來獲得返回後的結果。 當這個後續的activity被關閉,它將傳送一個 Intent 給 onActivityResult() 方法。

例如,你可能想要取一個聯絡人的資訊。下面介紹怎麼建立intent並處理結果:

private void pickContact() {
    // Create an intent to "pick" a contact, as defined by the content provider URI
    Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
    startActivityForResult(intent, PICK_CONTACT_REQUEST);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // If the request went well (OK) and the request was PICK_CONTACT_REQUEST
    if (resultCode == Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST) {
        // Perform a query to the contact's content provider for the contact's name
        Cursor cursor = getContentResolver().query(data.getData(),
        new String[] {Contacts.DISPLAY_NAME}, null, null, null);
        if (cursor.moveToFirst()) { // True if the cursor is not empty
            int columnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
            String name = cursor.getString(columnIndex);
            // Do something with the selected contact's name...
        }
    }
}

這個例子展示了使用onActivityResult() 來獲取結果的基本方法。 第一步要判斷請求是否被成功響應,通過判斷resultCode 是不是RESULT_OK—, 然後判斷這個響應是不是針對相應的請求— ,此時只要判斷requestCode 和傳送時提供的第二個引數 startActivityForResult() 是否相匹配。 最後,查詢 Intent中的data資訊。 (data 引數)。
這個過程中,ContentResolver 開啟了一個查詢而不是content provider, 它返回一個 Cursor ,這將允許資料被讀取。