ความแตกต่างระหว่าง android.app.Fragment และ android.support.v4.app.Fragment


175

อะไรคือความแตกต่างระหว่างandroid.app.Fragmentและandroid.support.v4.app.Fragmentและอะไรคือสถานการณ์ที่แต่ละคนควรใช้

คำตอบ:


288

android.support.v4.app.Fragmentเป็นคลาสFragmentในไลบรารีการสนับสนุน android ซึ่งเป็นแพ็คเกจความเข้ากันได้ที่ช่วยให้คุณใช้คุณสมบัติใหม่ของ Android บน Android เวอร์ชันเก่า

android.app.Fragmentเป็นคลาสFragmentใน Android SDK เปิดตัวใน Android 3 (API 11)

หากคุณต้องการที่จะทำให้คุณใช้งานแอพพลิเคเศษและต้องการที่จะกำหนดเป้าหมายอุปกรณ์ก่อน API 11 android.support.v4.app.Fragmentคุณต้องใช้ แต่ถ้าคุณเท่านั้นอุปกรณ์ที่ใช้ API 11 android.app.Fragmentหรือสูงกว่ากำหนดเป้าหมายคุณสามารถใช้

แก้ไข: android.app.Fragment ขณะนี้ระบบปฏิบัติการเลิกใช้แล้ว (ณ ระดับ API 28) และทุกคนควรย้ายไปใช้การใช้งานไลบรารีสนับสนุน


4
โปรดดูที่ "การใช้ FragmentStatePagerAdapter โดยไม่ต้องมีห้องสมุดสนับสนุน": stackoverflow.com/questions/18512294/…
CJBS

หากคุณแทนที่ onAttach () โปรดดูหัวข้อนี้เพื่อหลีกเลี่ยงการถูกเรียกในบางกรณีด้วย android.app.Fragment: stackoverflow.com/questions/32083053/…
Hong

3
จะใช้ Androidx: androidx.fragment.app.Fragment
Abhijit Kurane

56

ตั้งแต่ 2018:

จากandroid.app.Fragment เอกสาร :

คลาสนี้เลิกใช้แล้วใน API ระดับ 28
ใช้ไลบรารีการสนับสนุนFragmentสำหรับการทำงานที่สอดคล้องกันในทุกอุปกรณ์และเข้าถึง Lifecycle

ดังนั้นandroid.support.v4.app.Fragmentควรใช้แฟรกเมนต์สนับสนุน ( ) ทุกหนทุกแห่งแทนที่จะเป็นแฟรกเมนต์ดั้งเดิม ( android.app.Fragment) ทันที


@Artyom เป็น noob เพื่อการพัฒนา Android ฉันคาดว่าเมื่อandroid.app.Fragmentเลิกเรียน API ระดับ 28 จะมีทางเลือกวิธีทดแทนที่รุนแรง มีวิธีการส่งต่อหรือย้อนกลับนี้เข้ากันได้android.support.v4.app.Fragmentกับวิธีการที่เหมาะสมหรือไม่
ergohack

1
@ergohack เห็นด้วยวิธีนั้น: สำหรับโค้ดจาวาคุณสามารถรวม bytecode ใน runtime ของอุปกรณ์หรือในไฟล์ jar ของแอปพลิเคชัน รหัสห้องสมุดสนับสนุนจะอยู่ในขวดของคุณและให้คุณสมบัติเช่นเดียวกับรหัสที่ให้มาพร้อมรันไทม์ดังนั้นจึงไม่มีเหตุผลที่จะไม่ใช้ห้องสมุดสนับสนุนที่ทันสมัยและได้รับการบำรุงรักษาแทนรหัสอายุและรหัสที่ไม่มีการเปลี่ยนแปลงของโทรศัพท์เป้าหมายของคุณ
ปิแอร์

12

ฉันใช้android.support.v4.app.Fragmentเฉพาะ

แอพทั้งหมดที่ฉันเขียนต้องรองรับกลับไปเป็น Android 2.3 และเป็นวิธีที่ง่ายที่สุดในการทำ

หากคุณสนับสนุน 11+ ให้ทำandroid.app.Fragmentตาม


18
ในกรณีดังกล่าวคุณจะพลาดคุณสมบัติมากมายที่มีอยู่ในไลบรารีสนับสนุน แต่เฉพาะในภาษาดั้งเดิมหลังจากระดับ API ที่แน่นอน ตัวอย่างเช่น getChildFragmentManager () ไม่สามารถใช้ได้จนถึงระดับ 17 คำแนะนำของฉันคือใช้แฟรกเมนต์สนับสนุนและแสร้งทำเป็นว่าไม่มีเจ้าของดั้งเดิมอยู่
Johan

4

หากแอปพลิเคชันของคุณกำหนดเป้าหมายสำหรับ API 11 ขึ้นไปคุณสามารถใช้android.app.Fragmentและไฟล์ APK ของคุณจะเล็กลง

หรือเพิ่มandroid.support.v4.app.Fragmentไลบรารีลงในโครงการของคุณเพื่อรองรับ Android API เวอร์ชันเก่า (Android 3.x)


2

android.support.v4.app.Fragment เป็นไลบรารีที่คุณสามารถใช้เพื่อรับความเข้ากันได้ย้อนหลังสำหรับ API เวอร์ชันเก่ากว่า

มีการเพิ่มแฟรกเมนต์ใน API ระดับ 11 (พร้อมด้วยคุณสมบัติอื่น ๆ ) คุณควรรวมไลบรารีนั้นเพื่อขยายฟังก์ชันเหล่านั้นไปยังอุปกรณ์ pre-API 11 นั่นเป็นห้องสมุดที่มีประโยชน์และฉันขอแนะนำให้ดูที่ ActionBarSherlock ซึ่งขยายแถบการดำเนินการไปยังอุปกรณ์ pre-API v11


-2

หากแอปพลิเคชันของคุณกำหนดเป้าหมายสำหรับ API 11 หรือสูงกว่าคุณสามารถใช้ android.app.Fragment และจะลดขนาด APK มิฉะนั้นให้ใช้ android.support.v4.app.Fragment

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.