啟動一個帶返回結果的activity
阿新 • • 發佈:2018-12-14
啟動一個帶返回結果的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 ,這將允許資料被讀取。