Sự khác biệt giữa android.app.Fragment và android.support.v4.app.Fragment


175

Sự khác biệt giữa android.app.Fragmentandroid.support.v4.app.Fragment, và hoàn cảnh nào nên được sử dụng?

Câu trả lời:


288

android.support.v4.app.Fragmentlà lớp Fragment trong thư viện hỗ trợ Android, đây là gói tương thích cho phép bạn sử dụng một số tính năng mới hơn của Android trên các phiên bản Android cũ hơn.

android.app.Fragmentlà lớp Fragment trong phiên bản gốc của SDK Android. Nó được giới thiệu trong Android 3 (API 11).

Nếu bạn muốn làm cho ứng dụng của mình sử dụng các đoạn và muốn nhắm mục tiêu các thiết bị trước API 11, bạn phải sử dụng android.support.v4.app.Fragment. Tuy nhiên, nếu bạn chỉ nhắm mục tiêu các thiết bị chạy API 11 trở lên, bạn có thể sử dụng android.app.Fragment.

Chỉnh sửa: hệ điều hành có chứa android.app.Fragment hiện không được chấp nhận (kể từ cấp API 28) và mọi người nên chuyển sang sử dụng các triển khai thư viện hỗ trợ.


4
Đồng thời xem "Sử dụng thư viện hỗ trợ FragmentStatePagerAdOG KHÔNG CÓ": stackoverflow.com/questions/18512294/
Kẻ

Nếu bạn ghi đè onAttach (), vui lòng xem chủ đề này để tránh nó không được gọi dưới một số trường hợp với android.app.Fragment: stackoverflow.com/questions/32083053/...
Hồng

3
sẽ sử dụng Androidx: androidx.fragment.app.Fragment
Abhijit Kurane

56

Tính đến năm 2018:

Từ android.app.Fragment tài liệu :

Lớp này không được chấp nhận ở cấp độ API 28.
Sử dụng Thư viện hỗ trợ Fragmentcho hành vi nhất quán trên tất cả các thiết bị và truy cập Vòng đời.

Vì vậy, các đoạn hỗ trợ ( android.support.v4.app.Fragment) nên được sử dụng ở mọi nơi thay vì các đoạn gốc ( android.app.Fragment) bây giờ.


@Artyom, với tư cách là một người phát triển Android, tôi đã hy vọng rằng khi android.app.Fragmentlớp bị phản đối, API cấp 28 đó sẽ có một cách tiếp cận thay thế triệt để, có thể thay thế triệt để. Có một cách tiếp cận về phía trước hay điều này có tương thích ngược với android.support.v4.app.Fragmentcách tiếp cận phù hợp không?
ergohack

1
@ergohack Xem theo cách đó: đối với mã java, bạn có thể bao gồm mã byte bên trong thời gian chạy của thiết bị hoặc bên trong tệp jar của ứng dụng. Mã thư viện hỗ trợ sẽ được đưa vào bình của bạn và cung cấp tính năng tương tự như mã được cung cấp trong thời gian chạy, vì vậy không có lý do gì để không sử dụng thư viện hỗ trợ hiện đại và được bảo trì thay vì mã cũ và không rõ ràng của điện thoại mục tiêu của bạn.
Pierre

12

Tôi sử dụng android.support.v4.app.Fragmentđộc quyền.

Tất cả các ứng dụng tôi viết cần hỗ trợ ngay cho Android 2.3 và đây là cách dễ nhất để làm điều đó.

Nếu bạn đang hỗ trợ 11+ thì hãy kiên trì android.app.Fragment.


18
Trong trường hợp đó, bạn đang bỏ lỡ rất nhiều tính năng tồn tại trong thư viện hỗ trợ nhưng chỉ có ở tính năng gốc sau một cấp API nhất định. Ví dụ, getChildFragmentManager () không khả dụng cho đến cấp 17. Lời khuyên của tôi là chỉ sử dụng các Đoạn hỗ trợ và giả vờ rằng bản địa không tồn tại.
Johan

4

Nếu ứng dụng của bạn được nhắm mục tiêu cho API 11 trở lên, Bạn có thể sử dụng android.app.Fragmentvà tệp APK của bạn sẽ nhỏ hơn.

Mặt khác, thêm android.support.v4.app.Fragmentthư viện vào dự án của bạn để hỗ trợ các phiên bản API Android cũ hơn (Android 3.x).


2

android.support.v4.app.Fragment là một thư viện mà bạn có thể sử dụng để có được khả năng tương thích ngược cho phiên bản API cũ hơn.

Các đoạn đã được thêm vào API cấp 11 (cùng với các tính năng khác), bạn nên bao gồm thư viện đó để mở rộng chức năng đó cho các thiết bị API 11 trước. Đó là một thư viện hữu ích và tôi khuyên bạn nên xem ActionBarSherlock, nơi mở rộng thanh hành động cho các thiết bị API v11 trước.


-2

Nếu ứng dụng của bạn được nhắm mục tiêu cho cấp độ API 11 trở lên, Bạn có thể sử dụng android.app.Fragment và nó sẽ giảm kích thước APK. Nếu không, hãy sử dụng android.support.v4.app.Fragment

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.