Search…

Tìm Hiểu startActivityForResult và onActivityResult trong Android

Nguyễn NghĩaNguyễn Nghĩa
11/11/20201 min read
Hướng dẫn trường hợp Activity A start Activity B mà muốn nhận lại dữ liệu từ Activity B khi Activity B kết thúc.

Nhắc lại về chuyển Activity trong Android

Trong Android để chuyển Activity, sử dụng phương thức startActivity() với đối số truyền vào là 1 Intent. Ví dụ chuyển từ MainActivity (Activity A) sang FavoriteActivity (Activity B).

Intent intent = new Intent(MainActivity.this, FavoriteActivity.class);
startActivity(intent);

Sau khi gọi phương thức startActivity() thì MainActivity được đẩy xuống dưới Back Stack, FavoriteActivity nằm ở trên đỉnh của Back Stack và ở trạng thái running.

Activity Back Stack
Activity Back Stack

 

Với việc sử dụng phương thức startActivity() để thực hiện chuyển Activity thì không thể nhận được dữ liệu từ Activity đã bắt đầu, để nhận dữ liệu từ Activity đã bắt đầu phải sử dụng phương thức startActivityForResult() và phương thức onActivityResult() để xử lý dữ liệu trả về ở Activity gọi startActivityForResult().

startActivityForResult

Phương thức startActivityForResult() được sử dụng khi Activity A start Activity B và muốn nhận dữ liệu trả về từ Activity B đó.

public void startActivityForResult(Intent intent, int requestCode)

Với:

  • intent: đối tượng chứa các thông tin về Activity muốn chuyển đến.
  • requestCode: 1 con số kiểu int.

onActivityResult

Cần phải override lại phương thức onActivityResult() trong Activity A muốn nhận dữ liệu trả về, phương thức này luôn đồng hành với phương thức startActivityForResult().

Phương thức onActivityResult() là phương thức xử lý kết quả trả về, từ Activity đã mở thông qua phương thức startActivityForResult(). Phương thức này có prototype như sau:

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

Các đối số có ý nghĩa như sau:

  • requestCode: 1 số kiểu int đã truyền qua với phương thức startActivityForResult(Intent intent, int requestCode).
  • resultCode: là code đã đặt trong phương thức setResult(Intent data, int resultCode)
  • data: là đối tượng chứa dữ liệu ở Activity B.
IO Stream

IO Stream Co., Ltd

developer@iostream.co
383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2025