Android.app Fragments เทียบกับ android.support.v4.app โดยใช้ ViewPager?


182

ฉันมีคำถามเกี่ยวกับไลบรารีการสนับสนุน Android ชิ้นส่วนและเป็นตัวอย่างเฉพาะViewPagerชั้นเรียน ความตั้งใจของฉันคือการสร้างแอปที่มีฟังก์ชั่นการทำงานคล้ายกับตัวอย่างที่มีให้ในเว็บไซต์ของนักพัฒนา Android ( http://developer.android.com/training/animation/screen-slide.htmlหรือhttp://developer.android.com/) training / Implement-navigation / lateral.html ) เมื่อมองดูรหัสของพวกเขาฉันสังเกตเห็นว่าพวกเขาใช้android.support.v4.appห้องสมุดซึ่งจากการวิจัยของฉันเป็นวิธีเดียวในการเข้าถึงViewPagerชั้นเรียน

ในสถานการณ์ของฉันฉันไม่สนใจความเข้ากันได้แบบย้อนหลัง ระดับ API ขั้นต่ำคือ 14 (Ice Cream Sandwich) และเป้าหมายการสร้างคือ 4.2 Jelly Bean ในรูปแบบที่ง่ายที่สุดแอปของฉันทำงานได้ดีเหมือนกับการสาธิตครั้งที่สองที่ฉันเชื่อมโยงกับเว็บไซต์ Android dev เพียงแค่รูดระหว่างแท็บสามแท็บที่มีเนื้อหาในแต่ละรายการ

บทความ / โพสต์ / คำตอบทั้งหมดที่ฉันได้อ่านดูเหมือนจะสนับสนุนไลบรารี v4 อย่างมาก ทีนี้สำหรับฉันแล้วคำถามยืดยาว:

  1. วิธีที่ดีที่สุดในการจัดโครงสร้างแอปพลิเคชันของฉันคือการใช้android.support.v4.appและด้วยการใช้ SupportFragments หรือใช้แฟรกเมนต์ที่มีให้ในandroid.app- และเพราะเหตุใด

  2. หากเศษชิ้นส่วนจากandroid.appทางไปเป็นวิธีการที่เหมาะสมที่สุดในการเข้าใกล้ViewPagersคืออะไร?

  3. หาก SupportFragments เหมาะสมที่สุดกับงานฉันจะประเมินว่าพวกเขามีฟังก์ชั่นการทำงานเหมือนกับที่อื่น ๆ - ดังนั้นวัตถุประสงค์ของการมีพวกเขาอยู่ข้างในandroid.appคืออะไร?

หวังว่าใครบางคนที่มีความเข้าใจที่ชัดเจนสามารถให้ความกระจ่างแก่ฉันได้บ้างเพราะฉันเชื่อ ...


1
คุณไม่สามารถใช้งานได้Fragmentsหากคุณกำลังใช้งานViewPagerคุณจำเป็นต้องใช้ไลบรารีการสนับสนุนSupportFragment
tyczj

1
SupportFragmentไม่ใช่คลาสใน Android SDK ...
Karakuri

2
@ Karakuri ขออภัยในความสับสน ผมไม่ได้หมายถึงการเรียนที่แท้จริงSupportFragmentฉันเพียงหมายถึงในระดับใช้ได้Fragment android.support.v4.app
jonstaff

@jonstaff ทั้งสองวิธีคุณสามารถใช้คลาส
แฟรกเมน

@tyczj ขอบคุณ แต่นั่นไม่ได้ตอบคำถาม ฉันกำลังมองหามากขึ้นสำหรับเหตุผลเพราะผมรู้อยู่แล้วว่าไม่มีในViewPager android.app
jonstaff

คำตอบ:


183

คุณสามารถใช้ViewPagerกับแฟรกเมนต์เนทีฟจากandroid.appแพ็คเกจด้วยอะแดปเตอร์จากแพ็คเกจandroid.support.v13.app คุณต้องใช้ jar สนับสนุน v13 สำหรับสิ่งนั้น

มีอะแดปเตอร์สองรุ่นที่ใช้งานได้ViewPagerส่วนที่อยู่ในv4แพ็คเกจมีไว้เพื่อใช้งานกับแฟรกเมนต์สนับสนุนส่วนที่อยู่ในv13แฟรกเมนต์ดั้งเดิม

เหตุผลที่ตอนนี้มีการใช้งานสองส่วนคือประวัติ: แฟรกเมนต์ในandroid.appแพ็กเกจถูกนำมาใช้กับ Android 3 สำหรับแท็บเล็ตเท่านั้นและไลบรารีการสนับสนุนถูกสร้างขึ้นเพื่อนำแฟรกเมนต์ไปยังโทรศัพท์ที่ใช้เวอร์ชันที่เก่ากว่า บน Android 4 คุณมีทั้งคู่

จากประสบการณ์ของฉันเองฉันอยากจะแนะนำให้ใช้แฟรกเมนต์สนับสนุนแม้ในขณะที่พัฒนาสำหรับ Android 4 นี่คือเหตุผลบางประการ: แฟรกเมนต์หรือแฟรกเมนต์สนับสนุน


3
ขอบคุณสำหรับสิ่งนี้! ฉันรู้ว่าฉันไปงานปาร์ตี้สาย แต่คำตอบนี้ช่วยฉันได้มาก
Kyle

support.v13 ใช้งานได้กับ ViewPager ... จนกว่าคุณจะลองใช้ ViewPager ใน DialogFragment :-(
SteelBytes

android.appไม่มีFragmentPagerAdapterดังนั้นจึงเป็นไปไม่ได้ที่จะใช้ viewpager กับ android.app.Fragment? ความคิดใด ๆ ที่นี่? มีตัวเลือกสำหรับเพจเจอร์มุมมองเก่าหรือไม่? เพื่อขอแยกส่วนสำหรับแท็บที่กำหนดแบบไดนามิก
Nikhil

@Nikhil FragmentPagerAdapter มีสองเวอร์ชัน หนึ่งในandroid.support.v4.appแพคเกจใช้งานได้กับชิ้นส่วนสนับสนุนอื่น ๆ ในandroid.support.v13.appกับชิ้นส่วน 'ปกติ'
brillenheini

ฉันหวังว่าจะใช้ v13 เพื่อหลีกเลี่ยงการใช้ v4 ปรากฎว่า v4 นั้นขึ้นอยู่กับ v13 ดังนั้นฉันอาจใช้ส่วนสนับสนุน / เพจเจอร์ดู
Vas

3

android.app.Fragmentคลาสเลิกใช้แล้วตั้งแต่ Android P ( ลิงก์ ) ดังนั้นandroid.support.v4.app.Fragmentควรใช้เฉพาะที่ทุกที่


1

หากคุณจะกำหนดเป้าหมาย API 11+ คุณไม่จำเป็นต้องมีห้องสมุดสนับสนุน [และ apk ที่แท้จริงของคุณจะเล็กลงอย่างน้อย)

หากคุณต้องการสนับสนุนอะไรก่อน Android 3.x คุณจะต้องมีไลบรารีการสนับสนุน

นี่คือสิ่งที่คุณถามหรือไม่


9
คุณต้องใช้ไลบรารีการสนับสนุนเพื่อใช้ ViewPager ซึ่งเป็นสิ่งที่เขาถามเกี่ยวกับ
tyczj

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