[Translation] Các khái niệm cơ bản về Fragment trong Android( Phần 1)
Original Source is here Fragment là một phần giao diện người dùng hoặc hành vi của một ứng dụng. Fragment có thể được đặt trong Activity, nó có thể cho phép thiết kế activity với nhiều mô-đun. Có thể nói Fragment là một loại sub-Activity. Khái niệm fragment mới được đưa vào từ phiên bản Android ...
Original Source is here Fragment là một phần giao diện người dùng hoặc hành vi của một ứng dụng. Fragment có thể được đặt trong Activity, nó có thể cho phép thiết kế activity với nhiều mô-đun. Có thể nói Fragment là một loại sub-Activity.
Khái niệm fragment mới được đưa vào từ phiên bản Android 3.0 HoneyComb. Tuy nhiên tính năng này cũng được Google bổ sung cho các API thấp hơn (từ Level 4) thông qua thư viện hỗ trợ Android Support Library v4.
Vòng đời của Fragment
Mỗi Fragment có vòng đời riêng của nó, và vòng đời này giống với vòng đời của một Activity. Giai đoạn 1: Khi một Fragment được tạo, nó sẽ đi qua một số trạng thái:
Giai đoạn 1 : Khởi tại fragment :
-
onAttach()
-
onCreate()
-
onCreateView()
-
onActivityCreated()
Giai đoạn 2: Khi một Fragment được hiển thị:
- onStart()
- onResume()
Giai đoạn 3: Khi Fragment chạy ẩn dưới nền:
- onPause()
- onStop()
Giai đoạn 4: Khi hủy một Fragment:
- onPause()
- onStop()
- onDestroyView()
- onDestroy()
- onDetach()
Cách tạo một Fragment
Sau đây là một số bước để tạo một Fragment đơn giản:
Đầu tiên bạn phải nghĩ xem cần bao nhiêu Fragment trong một Activity. VD: Bạn muốn 2 Fragment cho trường hợp màn hình nằm ngang, và 1 Fragment trong trường hợp màn hình đứng. Tiếp theo, dựa trên số Fragment đã tính, tạo các lớp kế thừa lớp Fragment. Lớp Fragment có nhiều phương thức callback, bạn có thể override bất kỳ phương thức nào dựa trên yêu cầu. Tương ứng với mỗi Fragment, bạn cần phải tạo các file Layout (XML file). Cuối cùng, chỉnh sửa file Activity, để xác định vị trí của các Fragment theo yêu cầu. Đây là một số phương thức quan trọng bạn có thể Override trong lớp Fragment của bạn.
onCreate(): Hệ thống gọi phương thức này khi tạo Fragment. Bạn nên khởi tạo các thành phần thiết yếu của Fragment mà bạn muốn giữ lại khi Fragment được tạm dừng, dừng lại hoặc tiếp tục. onCreateView(): Hệ thống gọi phương thức này khi Fragment vẽ giao diện của nó lần đầu tiên. Để vẽ giao diện cho Fragment bạn cần phải return View từ phương thức này. Bạn có thể return null nếu Fragment không cung cấp giao diện. onPause(): Hệ thống gọi phương thức này như là để đánh dấu lần đầu người dùng rời Fragment. Đây là nơi bạn ghi lại bất kỳ thay đổi nào và thay đổi cần tiếp tục tồn tại ngoài lần dùng này.
Để hiểu rõ hơn vòng đời của một Frament, chúng ta nạp chồng tất cả các hàm sự kiện và ghi ra log:
@Override public void onAttach(Activity activity) { super.onAttach(activity); Log.d("Fragment 1", "onAttach"); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d("Fragment 1", "onCreate"); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Log.d("Fragment 1", "onActivityCreated"); } @Override public void onStart() { super.onStart(); Log.d("Fragment 1", "onStart"); } @Override public void onResume() { super.onResume(); Log.d("Fragment 1", "onResume"); } @Override public void onPause() { super.onPause(); Log.d("Fragment 1", "onPause"); } @Override public void onStop() { super.onStop(); Log.d("Fragment 1", "onStop"); } @Override public void onDestroyView() { super.onDestroyView(); Log.d("Fragment 1", "onDestroyView"); } @Override public void onDestroy() { super.onDestroy(); Log.d("Fragment 1", "onDestroy"); } @Override public void onDetach() { super.onDetach(); Log.d("Fragment 1", "onDetach"); }
Ta sẽ có được log sau :
11-03 23:24:29.398: D/Fragment 1(11354): onAttach
11-03 23:24:29.398: D/Fragment 1(11354): onCreate
11-03 23:24:29.398: D/Fragment 1(11354): onCreateView
11-03 23:24:29.398: D/Fragment 1(11354): onActivityCreated
11-03 23:24:29.398: D/Fragment 1(11354): onStart
11-03 23:24:29.398: D/Fragment 1(11354): onResume
11-03 23:24:33.835: D/Fragment 1(11354): onPause 11-03 23:24:33.835: D/Fragment 1(11354): onStop
11-03 23:24:33.835: D/Fragment 1(11354): onDestroyView
11-03 23:24:33.835: D/Fragment 1(11354): onDestroy
11-03 23:24:33.835: D/Fragment 1(11354): onDetach
11-03 23:24:33.914: D/Fragment 1(11354): onAttach Bạn có thể thấy Log chạy theo đúng với vòng đời mình đã đề cập ở trên . Như vậy chúng ta đã có hiểu biết cơ bản về vòng đợi của fragment , phần tiếp theo mình sẽ giới thiệu về cách quản lí fragment trong activity .