Android từ đầu: Activity và Fragment
Vietnamese (Tiếng Việt) translation by Dai Phong (you can also view the original English article)
Khi người dùng tương tác với một ứng dụng trên thiết bị Android, họ hầu như luôn luôn tương tác với một Activity
, một màn hình đơn nhất trên thiết bị. Sau khi Google phát hành phiên bản Android Honeycomb, các đối tượng Fragment
đã được thêm vào hệ điều hành để cho phép sử dụng lại code dễ dàng hơn và mỗi lần thay đổi nội dung trên màn hình mà không cần phải huỷ/xây dựng lại một Activity
mới.
Trong hướng dẫn này, bạn tìm hiểu thêm về các đối tượng Activity
và Fragment
trên Android, vòng đời của chúng, và khi nào và làm thế nào bạn nên sử dụng chúng trong các ứng dụng của riêng bạn.
1. Activity
Activity là một thành phần chính của hệ sinh thái Android và là một trong những khái niệm đầu tiên mà bạn cần phải nắm bắt khi bạn trở nên quen thuộc hơn với việc phát triển Android. Các Activity đóng vai trò như một màn hình duy nhất mà sẽ được hiển thị cho người dùng, và chúng thường đóng gói rất nhiều logic của chương trình.
Khi bạn tạo ra một lớp Activity
, thủ công hoặc thông qua một trong các mẫu của Android Studio, bạn cần phải xác định nó trong tập tin AndroidManifest.xml của dự án, nếu nó không được thêm vào, như sau:
1 |
<activity android:name=".MainActivity"> |
2 |
<intent-filter>
|
3 |
<action android:name="android.intent.action.MAIN" /> |
4 |
|
5 |
<category android:name="android.intent.category.LAUNCHER" /> |
6 |
</intent-filter>
|
7 |
</activity>
|
Trong đoạn code ở trên, bạn cũng thấy một thẻ intent-filter
với một action
và category
. Mặc dù đi sâu vào chi tiết đối với các phần tử này nằm ngoài phạm vi của hướng dẫn này, nhưng bạn nên biết rằng những dòng bổ sung đó là cách hệ thống nhận biết Activity
nào để mở trước tiên khi người dùng chọn ứng dụng của bạn.
Một khi bạn đã tạo ra một Activity
, bạn có thể cần kết hợp nó với một tập tin Layout XML để bạn có thể dễ dàng sử dụng các đối tượng View từ Layout. Bạn có thể làm điều này trong phương thức onCreate()
.
1 |
@Override
|
2 |
protected void onCreate(Bundle savedInstanceState) { |
3 |
super.onCreate(savedInstanceState); |
4 |
setContentView(R.layout.activity_main); |
5 |
}
|
Sau khi gọi setContentView()
, bạn có thể bắt đầu tham chiếu đến các đối tượng View
từ các tập tin Layout XML.
Vòng đời Activity
Tại thời điểm này, bạn có thể tự hỏi onCreate()
là gì và lý do tại sao chúng ta sử dụng nó. Phương thức onCreate()
là một trong những phương thức kết hợp với vòng đời của Activity
. Nó được gọi khi Activity
lần đầu được tạo ra. Đây là nơi bạn có thể thực một số bước khởi tạo chung trong Activity
của bạn vì nó bảo đảm sẽ được gọi trước tiên trong vòng đời Activity
như bạn có thể nhìn thấy dưới đây.



Sơ đồ ở trên cho thấy thứ tự của các phương thức được gọi khi một Activity
đi ra hoặc đi vào các trạng thái khác nhau có thể:
-
onCreate()
được gọi ngay lập tức khi mộtActivity
được tạo ra, như tên gọi của nó.onDestroy()
thì ngược lại và được gọi khiActivity
được xoá khỏi bộ nhớ điện thoại. Có một vài trường hợp nhỏ nơionDestroy()
có thể không được gọi, nhưng chúng nằm ngoài phạm vi của hướng dẫn này. -
onStart()
được gọi khi mộtActivity
hiện hữu đối với người dùng vàonStop()
được gọi khi màActivity
không còn được nhìn thấy. Cả hai có thể được kích hoạt khi một ứng dụng được đưa vào nền bằng cách sử dụng nút home của thiết bị và khi ứng dụng được đưa trở lại màn hình. -
onResume()
vàonPause()
được liên kết vớiActivity
đang ở trên màn hình. Nếu một thành phần khác đi vào màn hình, chẳng hạn như một hộp thoại hoặc mộtActivity
khác, thì phần này của vòng đời được kích hoạt.
Hiểu từng phương thức này khi nào được gọi sẽ giúp bạn khỏi rắc rối khi bạn phát triển và cần phải phân chia/tái phân bổ các tài nguyên bên trong ứng dụng của bạn.
Xử lý các thay đổi cấu hình
Bây giờ thì bạn đã nắm một chút về vòng đời Activity
, đã đến lúc bạn đi sâu vào những gì sẽ xảy ra khi một Activity
bị phá hủy và tái tạo bởi hệ thống. Điều này có thể xảy ra trong một vài tình huống, phổ biến nhất là khi màn hình được xoay.
Các Activity
trải qua quá trình phân chia tiêu chuẩn của các phương thức onStop()
onPause()
, onDestroy()
, và sau đó onCreate()
khi một đối tượng mới của Activity
được tạo ra.
Một phương thức khác là không thấy có trong biểu đồ ở trên là onSaveInstanceState()
. Phương thức này được gọi khi một Activity
bị phá hủy và cho phép bạn lưu các thông tin đơn giản trong Bundle. Khi onCreate()
được gọi một lần nữa, bạn có thể trích xuất thông tin mà bạn đã lưu trước đó. Điều tương tự cũng có thể được thực hiện từ phương thức onRestoreInstanceState()
.
2. Fragment
Được giới thiệu cùng với Android 3.0 (Honeycomb), các đối tượng Fragment
là một công cụ tuyệt vời xử lý nhiều vấn đề khi chỉ có các lớp Activity
. Fragment cho phép tổ chức các thành phần giao diện người dùng của dự án cho các thiết bị khác nhau bằng cách cho bạn khả năng hiển thị nhiều phần giao diện người dùng trên một màn hình lớn hơn, chẳng hạn như một máy tính bảng, hoặc để hiển thị một cái tại một thời điểm và liên kết chúng với nhau trên thiết bị di động nhỏ.
Chúng cũng giúp phân đoạn code thành khối dễ quản lý, thay vì phải dựa vào các lớp Activity
lớn, phức tạp. Một tính năng cuối cùng, và có giá trị nhất, là các Fragment cho phép ứng dụng dễ dàng điều hướng và cung cấp một cách đơn giản để giao tiếp qua lại giữa các phần khác nhau của ứng dụng.
Vòng đời
Giống như Activity
, lớp Fragment
có riêng nó vòng đời giúp quản lý Fragment
từ khi nó được gắn vào một Activity
cho đến khi nó bị phá hủy. Hiểu rõ vòng đời giúp bạn tạo ra ứng dụng ổn định và nó cũng giúp bạn dễ dàng gỡ lỗi.



- Phương thức
onAttach()
vàonDetach()
thực thi khi một Fragment đã được thêm vào mộtActivity
và Fragment có thể được sử dụng trong ứng dụng. -
onCreate()
được gọi như là một phương thức khởi tạo cho các lớpFragment
vàonDestroy()
tương đương với huỷ. -
onCreateView()
là phương thức mà trong đó bạn khởi tạo một Layout và các đối tượngView
cho Fragment.onDestroyView()
được gọi khi hệ thống phân cấp View kết hợp với Fragment được loại bỏ. -
onStart()
vàonStop()
đóng vai trò tương tự như với vòng đời củaActivity
. Những phương thức này được kích hoạt khiFragment
trở nên hoặc không còn được nhìn thấy tương ứng. -
onPause()
onStart()
cũng tương tự với các phương thức tương ứng củaActivity
. Khi mộtFragment
có thể được nhìn thấy, nhưng sự tập trung của nó đã thay đổi, thì một trong hai phương thức này được gọi.
Các lớp con của Fragment
Mặc dù lớp Fragment
là lớp mạnh mẽ theo cách thức riêng của nó, nhưng nó không thể phát huy hết tiềm năng của nó mà không được mở rộng để phục vụ mục đích của ứng dụng. May mắn thay, Google đã cung cấp rất nhiều các lớp con khác nhau của Fragment
để giúp các nhà phát triển nhanh chóng xây dựng các ứng dụng tuyệt vời.
Trong phần này, tôi muốn nêu bật một vài cái trong số chúng để truyền cảm hứng cho bạn xây dựng các lớp Fragment
tuyệt vời của riêng bạn. Điều quan trọng cần phải biết được là các Fragment nào được xây dựng sẵn vì vậy bạn sẽ không lặp lại chúng.
ListFragment
Fragment
này có tích hợp một ListView
bên trong và một số phương thức trợ giúp để làm cho thành phần này nổi bật, chẳng hạn như một ProgressBar
không xác định (một vòng tròn, quay liên tục) và TextView
để hiển thị văn bản khi List
rỗng.
MapFragment
Đây là một Fragment
rất có giá trị, gói trong nó một MapView
để sử dụng với các dịch vụ Google Maps. Thay vì phải tự mình viết tất cả các code, bạn có thể thừa kế Fragment
này để thêm chức năng bản đồ cơ bản vào ứng dụng của bạn.
BrowseFragment
và DetailsFragment
Cả hai Frament
sẵn có này là một phần của Leanback Support Library Android cho TV và chúng xử lý giao diện người dùng và các chức năng cơ bản cho việc phát triển ứng dụng cho một thiết bị TV.
Tổng kết
Dù hướng dẫn này không đi sâu vào các lớp Activity
và Fragment
hoạt động như thế nào, nhưng bây giờ bạn cũng đã biết rằng chúng là các thành phần quan trọng để xây dựng giao diện người dùng cho ứng dụng của bạn. Bạn đã được giới thiệu về vòng đời của các Activity và Fragment, và chúng ta đã xem xét một số lớp con tiện lợi của Fragment
có thể giúp bạn xây dựng nên những ứng dụng tuyệt vời.
Khi bạn tiếp tục làm việc với Android, bạn sẽ thấy và được học về nhiều các lớp Activity
và Fragment
khác nhau sẵn có cho bạn và bạn sẽ, không phải mất công, xây dựng của riêng bạn.