Sự khác biệt giữa Fragment và FragmentActivity là gì?


Câu trả lời:


280

A Fragmentlà một phần của một Activity, trong đó có:

  • vòng đời của chính nó
  • nhận các sự kiện đầu vào của riêng mình
  • có thể được thêm hoặc loại bỏ trong khi Activityđang chạy.

A Fragmentphải luôn luôn được nhúng trong một Activity.

Fragmentskhông phải là một phần của API trước HoneyComb (3.0). Nếu bạn muốn sử dụng Fragmentstrong ứng dụng nhắm mục tiêu phiên bản nền tảng trước HoneyComb, bạn cần thêm Gói hỗ trợ cho dự án của mình và sử dụng FragmentActivityđể giữ Fragments. Các FragmentActivitylớp học có một API để đối phó với Fragments, trong khi Activitylớp, trước khi tổ ong, thì không.

Nếu dự án của bạn chỉ nhắm mục tiêu HoneyComb hoặc mới hơn, bạn nên sử dụng Activityvà không FragmentActivitygiữ của bạn Fragments.

Một số chi tiết:

Sử dụng android.app.Fragmentvới Activity. Sử dụng android.support.v4.app.Fragmentvới FragmentActivity. Đừng thêm gói hỗ trợ Fragmentvào Activityvì nó sẽ khiến Ngoại lệ bị ném.

Một điều cần cẩn thận: FragmentManagerLoaderManagercó các phiên bản hỗ trợ riêng cho FragmentActivity:

Nếu bạn đang sử dụng một Fragmenttrong một Activity(Honeycomb trở lên), cuộc gọi

  • getFragmentManager() để có được android.app.FragmentManager
  • getLoaderManager() để có được android.app.LoaderManager

nếu bạn đang sử dụng một Fragmenttrong một FragmentActivity(pre-Honeycomb), gọi:

  • getSupportFragmentManager()để có được android.support.v4.app.FragmentManager.
  • getSupportLoaderManager() để có được android.support.v4.app.LoaderManager

vì vậy, đừng làm

//don't do this
myFragmentActivity.getLoaderManager(); 
//instead do this:
myFragmentActivity.getSupportLoaderManager();

hoặc là

//don't do this:
android.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager();
//instead do this:
android.support.v4.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager()

Một điều hữu ích cần biết là trong khi một đoạn phải được nhúng vào Activitythì nó không phải là một phần của Activitybố cục. Nó có thể được sử dụng như một công nhân vô hình cho hoạt động, không có giao diện người dùng riêng.


6
Tuy nhiên, một đoạn không bắt buộc phải là một phần của bố cục hoạt động; bạn cũng có thể sử dụng một đoạn mà không có UI của chính nó như một nhân viên vô hình cho hoạt động.
uzay95

1
@ uzay95 cảm ơn bạn đã chỉ ra điều này. Tôi đã thêm một phần ở cuối để đề cập đến nó.
Gunnar Karlsson

@GunnarKarlsson Chúng ta có nên thêm phân đoạn vào phân đoạn không?
Dhasneem

2
@Dhasneem Bạn thêm Fragment vào FragmentActivity nếu bạn muốn ứng dụng của mình hoạt động trên các phiên bản Android thấp hơn 3.0. Nếu không, bạn thêm một mảnh vào một hoạt động.
Gunnar Karlsson

2
Cảm ơn! Điều này giải quyết vấn đề của tôi! Bây giờ tôi biết tại sao ứng dụng của tôi (được viết bằng Activity) luôn gặp sự cố tại onCreate sau khi thêm nút đăng nhập Facebook (họ sử dụng android.support.v4.app.Fragment trong ví dụ của họ). Tất nhiên cũng có lý do khác cho vụ tai nạn. Nhưng câu trả lời của bạn là mảnh ghép cuối cùng để đặt chúng lại với nhau.
Chlind

14

FragmentActivity là Hoạt động kinh điển của chúng tôi với hỗ trợ phân đoạn, không có gì hơn. Do đó, FragmentActivity là cần thiết, khi một Fragment sẽ được gắn vào Activity.

Well Fragment là thành phần tốt sao chép các hành vi cơ bản của Activity, vẫn không phải là thành phần ứng dụng độc lập như Activity và cần được gắn vào Activity để hoạt động.

Nhìn vào đây để biết thêm chi tiết


1
BTW, câu trả lời lỗi thời, chỉ áp dụng cho các ứng dụng muốn hoạt động trên các thiết bị cũ hơn API 11.
ToolmakerSteve

@ToolmakerSteve bạn có thể cung cấp thêm chi tiết? Nếu có thể, bạn có thể chỉnh sửa câu trả lời với phiên bản cập nhật không?
Gökhan Barış Aker

8

Hãy nghĩ về FragmentActivity như một lớp Activity thông thường có thể hỗ trợ Fragment. Trước tổ ong, một lớp hoạt động không thể hỗ trợ các mảnh vỡ trực tiếp, vì vậy điều này là cần thiết trong các hoạt động sử dụng các mảnh vỡ.

Nếu phân phối mục tiêu của bạn là Honeycomb và xa hơn nữa, bạn có thể mở rộng Hoạt động thay thế.

Ngoài ra, một đoạn sẽ được coi là một 'hoạt động phụ'. Nó không thể tồn tại mà không có một hoạt động. Luôn luôn nghĩ về một mảnh như một hoạt động phụ và bạn nên được tốt. Vì vậy, hoạt động sẽ là cha mẹ và (các) mảnh của mối quan hệ tượng trưng của con.


1

một FragmentActivity là một hoạt động đặc biệt có chứa Fragment. Trong vài từ này tôi đã giải thích cho bạn một trong những thay đổi quan trọng chính, với android 3.0 (HoneyComb), nhóm android đã chèn vào sdk android.

Với những khái niệm mới này, các đoạn mã và bố cục của bạn trở nên linh hoạt và dễ bảo trì hơn. Nếu bạn tìm kiếm trên google có rất nhiều ví dụ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.