12/08/2018, 15:25

Fragment và cơ chế BackStack và sử dụng fragment hiệu quả nhất P1

Với việc càng ngày càng nhiều mẫu mã thiết bị Android ra đời thì người ta đã nghĩ ra những cách khác nhau để bố trí giao diện ứng dụng sao cho phù hợp để tận dụng diện tích màn hình. Một trong số đó là Fragment. Bài viết này chúng ta sẽ cùng tìm hiểu về nó. Fragment là gì? Vòng đời của ...

Với việc càng ngày càng nhiều mẫu mã thiết bị Android ra đời thì người ta đã nghĩ ra những cách khác nhau để bố trí giao diện ứng dụng sao cho phù hợp để tận dụng diện tích màn hình. Một trong số đó là Fragment. Bài viết này chúng ta sẽ cùng tìm hiểu về nó.

  • Fragment là gì?
  • Vòng đời của Fragment.
  • Cách tạo một Activity với Fragment cơ bản.
  • Tích hợp Backstack cho Fragment trong Activity đã tạo.

Fragment là gì?

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. Fragment cũng có layout của riêng của nó, cũng có các hành vi và vòng đời riêng.

  • Chúng ta có thể thêm hoặc xóa Fragment trong một Activity trong khi Activity này đang chạy.

Có thể kết hợp nhiều Fragment trong một Activity để xây dựng giao diện người dùng đa khung. Một Fragment có thể được sử dụng trong nhiều Activities. Vòng đời của Fragment có quan hệ chặt chẽ với vòng đời của Activity đang dùng nó điều này có nghĩa là khi Activity bị tạm dừng thì các Fragment sẽ dừng lại. Fragment có thể thực hiện một hành vi mà không có trong thành phần giao diện người dùng. Fragment được thêm vào API 11 trở lên. Bạn có thể tạo các Fragments bằng cách kế thừa lớp Fragment và Fragment được thêm vào layout bởi thẻ <fragment>

alt

alt

Vòng đời của Fragment

  • Vòng đời của một 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:

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()

alt

Cách tạo một Fragment Sau đây là một số bước để tạo một Fragment đơn giản:

  1. Đầ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.

  1. 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.
  2. 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.

  1. 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.

  2. 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.

  3. 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.

Tasks and Back Stack

  • Back stack không chỉ có tác dụng với activity mà còn có tác dụng với các fragment. Khi bạn cung cấp 1 FragmentTransaction để add, replace, remove một fragment từ UI, bạn có thể dùng addToBackStack() để thêm FragmentTransaction đó vào trong Back stack.

  • Khi ấn Back button, FragmentTransaction sẽ được đảo ngược hành động trước đó

added fragment -> removed replaced fragment -> restored removed fragment -> added.

  • Mỗi transaction thêm vào trong Back stack sẽ đảo ngược đến khi activity chứa chúng bị xóa khỏi Back stack.

Link tham khảo : https://developer.android.com/guide/components/activities/tasks-and-back-stack.html

Phần 2 mình sẽ nói rõ hơn cách xây dụng base fragment và cách khỏi tạo một cách đơn giản nhât.

0