[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 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 fragment.jpg

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 .