Câu hỏi của tôi là ngoài sự khác biệt về thừa kế rõ ràng, sự khác biệt chính giữa Fragment
và là FragmentActivity
gì? Những kịch bản nào mỗi lớp phù hợp nhất? Tôi đang cố gắng hiểu lý do tại sao cả hai lớp này tồn tại ...
Câu hỏi của tôi là ngoài sự khác biệt về thừa kế rõ ràng, sự khác biệt chính giữa Fragment
và là FragmentActivity
gì? Những kịch bản nào mỗi lớp phù hợp nhất? Tôi đang cố gắng hiểu lý do tại sao cả hai lớp này tồn tại ...
Câu trả lời:
A Fragment
là một phần của một Activity
, trong đó có:
Activity
đang chạy.A Fragment
phải luôn luôn được nhúng trong một Activity
.
Fragments
khô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 Fragments
trong ứ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 FragmentActivity
lớp học có một API để đối phó với Fragments
, trong khi Activity
lớ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 Activity
và không FragmentActivity
giữ của bạn Fragments
.
Một số chi tiết:
Sử dụng android.app.Fragment
với Activity
. Sử dụng android.support.v4.app.Fragment
với FragmentActivity
. Đừng thêm gói hỗ trợ Fragment
vào Activity
vì nó sẽ khiến Ngoại lệ bị ném.
Một điều cần cẩn thận: FragmentManager
và LoaderManager
có các phiên bản hỗ trợ riêng cho FragmentActivity:
Nếu bạn đang sử dụng một Fragment
trong 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 Fragment
trong 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 Activity
thì nó không phải là một phần của Activity
bố 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.
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
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.
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ụ.