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 Fragmentvà là FragmentActivitygì? 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 Fragmentvà là FragmentActivitygì? 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 Fragmentlà một phần của một Activity, trong đó có:
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: FragmentManagervà LoaderManagercó 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.FragmentManagergetLoaderManager() để có được android.app.LoaderManagernế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.LoaderManagervì 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.
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ụ.