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

Giới thiệu

Ở các bài giới thiệu về Activity mình đã giới thiệu cho các bạn cơ bản về Activity cũng như chuyển đổi giữa các activity sử dụng đối tượng Intent và phương thức startActivity. Trong trường hợp này chúng ta start một activity mà không mong muốn nhận lại data từ activity mà chúng ta đã start. Vậy đôi khi chúng ta cần nhận lại dữ liệu từ activity mà chúng ta đã start thì phải làm thế nào. Để làm được điều đó các bạn hãy theo dõi bài viết ngay dưới đây.

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

Trong Android để chuyển Activity chúng ta sử phương thức startActivity với đối số truyền vào là một Intent. Ví dụ dưới đây sẽ chuyển từ MainActivity sang FavoriteActivity.

Sau khi gọi phương thức startActivity thì MainActivity sẽ được đẩy xuống dưới backStack và FavoriteActivity sẽ được nằm ở trên backStack và ở trạng thái running.

activity-android-ss-2

Với việc sử dụng phương thức startActivity để thực hiện chuyển activity thì chúng sẽ không không thể nhận được data từ activity mà chúng ta start. Để có thể nhận data từ activity mà chúng ta start thì chúng ta phải sử dụng phương thức startActivityForResult và phương thức onActivityResult để sử lý dữ liệu trả về ở Activity gọi startActivityForResult.

startActivityForResult

Phương thức startActivityForResult được sử dụng khi chúng ta muốn mở một activity và mông muốn lấy dữ liệu trả về từ activity đó.

Với

  • intent là đối tượng chứa các thông tin về activity mà chúng ta muốn start.
  • requestCode mà một con số kiểu int

onActivityResult

Chúng ta bắt buộc phải override lại phương thức onActivityResult trong activity mà chúng ta muốn nhận dữ liệu trả về. Phương thức này luôn 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à chúng ta đã mở thông qua phương thức startActivityForResult. Phương thức này có prototype như sau:

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

  • requestCode: Chính là một số kiểu int mà chúng ta đã truyền qua với phương thức startActivityForResult(Intent intent, int requestCode).
  • resultCode: Là code mà chúng ta đã set trong phương thức setResult(Intent data, int resultCode)
  • data: Là đối tượng chứa data ở activity mà chúng ta đã start truyền về.

Kết luận

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.