Dilemma: เมื่อใดควรใช้ Fragments vs Activities:


785

ฉันรู้แล้ว Activitiesได้รับการออกแบบมาเพื่อแสดงหน้าจอเดียวของแอปพลิเคชันของฉันในขณะที่Fragmentsได้รับการออกแบบให้เป็นรูปแบบ UI ที่ใช้ซ้ำได้โดยมีตรรกะฝังอยู่ภายใน

เมื่อไม่นานมานี้ฉันได้พัฒนาแอปพลิเคชั่นตามที่กล่าวไว้ว่าพวกเขาควรได้รับการพัฒนา ฉันสร้างActivityเพื่อเป็นตัวแทนของหน้าจอของแอพลิเคชันและเศษมือของฉันหรือViewPager Google Mapsฉันไม่ค่อยสร้างListFragment UI หรืออื่น ๆ ที่สามารถนำมาใช้ซ้ำได้หลายครั้ง

เร็ว ๆ นี้ผมสะดุดในโครงการที่มีเพียง 2 Activitiesหนึ่งเป็นและอีกหนึ่งคือSettingsActivity MainActivityเลย์เอาต์ของMainActivityบรรจุด้วยแฟรกเมนต์ UI แบบเต็มหน้าจอที่ซ่อนอยู่จำนวนมากและแสดงเพียงหนึ่งอันเท่านั้น ในActivityตรรกะมีหลายFragmentTransitionsหน้าจอที่แตกต่างกันของแอปพลิเคชัน

สิ่งที่ฉันชอบเกี่ยวกับวิธีการนี้คือเนื่องจากแอปพลิเคชันใช้ActionBarมันมันยังคงอยู่และไม่ย้ายไปอยู่กับภาพเคลื่อนไหวการสลับหน้าจอซึ่งเป็นสิ่งที่เกิดขึ้นกับการActivityสลับ สิ่งนี้ให้ความรู้สึกที่คล่องแคล่วยิ่งขึ้นสำหรับการเปลี่ยนหน้าจอ

ดังนั้นฉันเดาว่าสิ่งที่ฉันขอคือการแบ่งปันลักษณะการพัฒนาในปัจจุบันของคุณเกี่ยวกับหัวข้อนี้ฉันรู้ว่ามันอาจดูเหมือนคำถามตามความเห็นในตอนแรก แต่ฉันมองว่ามันเป็นคำถามที่เกี่ยวกับการออกแบบและสถาปัตยกรรมของ Android ... ตามความเห็นอย่างหนึ่ง

UPDATE (01.05.2014): ทำตามการนำเสนอนี้โดยEric BurkeจากSquare (ซึ่งฉันต้องบอกว่าเป็นการนำเสนอที่ยอดเยี่ยมพร้อมเครื่องมือที่มีประโยชน์มากมายสำหรับนักพัฒนา Android และฉันไม่เกี่ยวข้องกับ Square)

http://www.infoq.com/presentations/Android-Design/

จากประสบการณ์ส่วนตัวของฉันในช่วงไม่กี่เดือนที่ผ่านมาผมพบว่าวิธีที่ดีที่สุดในการสร้างการใช้งานของฉันคือการสร้างกลุ่มของชิ้นส่วนที่มาเป็นตัวแทนของการไหลActivityในการประยุกต์และนำเสนอชิ้นส่วนเหล่านั้นทั้งหมดในหนึ่ง ดังนั้นโดยทั่วไปคุณจะมีจำนวนActivitiesใบสมัครของคุณเท่ากับจำนวนการไหล ด้วยวิธีนี้แถบแอ็คชั่นยังคงเหมือนเดิมบนหน้าจอทั้งหมดของโฟลว์ ในขณะที่ Eric Burke กล่าวและฉันก็ตระหนักเช่นกันปรัชญาของการใช้น้อยActivitiesที่สุดไม่สามารถใช้ได้กับทุกสถานการณ์เพราะมันสร้างความสับสนในสิ่งที่เขาเรียกว่ากิจกรรม "พระเจ้า"


2
ลองดูโพสต์ของฉันที่ SO - stackoverflow.com/questions/24647078/…
My God

คำตอบ:


270

ผู้เชี่ยวชาญจะบอกคุณว่า: "เมื่อฉันเห็น UI ฉันจะรู้ว่าจะใช้ActivityหรือFragment" ในการเริ่มต้นนี้จะไม่มีความรู้สึกใด ๆ แต่ในเวลาจริงคุณจะสามารถบอกได้ว่าคุณต้องการFragmentหรือไม่

มีวิธีปฏิบัติที่ดีฉันพบว่ามีประโยชน์มากสำหรับฉัน มันเกิดขึ้นกับฉันในขณะที่ฉันพยายามอธิบายบางอย่างกับลูกสาวของฉัน

คือนึกภาพกล่องที่แสดงถึงหน้าจอ คุณสามารถโหลดหน้าจออื่นในช่องนี้ได้ไหม หากคุณใช้กล่องใหม่คุณจะต้องคัดลอกหลายรายการจากช่องที่ 1 หรือไม่ หากคำตอบคือใช่คุณควรใช้FragmentsเพราะรูทActivityสามารถเก็บองค์ประกอบที่ซ้ำกันทั้งหมดเพื่อประหยัดเวลาในการสร้างพวกเขาและคุณสามารถแทนที่ชิ้นส่วนของกล่องได้

แต่อย่าลืมว่าคุณต้องใช้กล่องบรรจุภัณฑ์เสมอ (Activity ) เสมอมิฉะนั้นชิ้นส่วนของคุณจะแยกย้ายกันไป ดังนั้นหนึ่งกล่องที่มีชิ้นส่วนอยู่ภายใน

ระวังอย่าใช้กล่องผิดวัตถุประสงค์ ผู้เชี่ยวชาญของ Android UX ให้คำแนะนำ (คุณสามารถค้นหาพวกเขาบน YouTube) เมื่อเราควรโหลดอย่างชัดเจนอีกครั้งActivityแทนที่จะใช้Fragment(เช่นเมื่อเราจัดการกับลิ้นชักนำทางซึ่งมีหมวดหมู่) เมื่อคุณรู้สึกสะดวกสบายFragmentsคุณสามารถดูวิดีโอทั้งหมดของพวกเขาได้ ยิ่งพวกเขาเป็นวัสดุที่จำเป็น

คุณสามารถตอนนี้มองไปที่คุณ UI และคิดออกถ้าคุณต้องการActivityหรือFragment? คุณได้มุมมองใหม่หรือไม่? ฉันคิดว่าคุณทำ


4
คุณมีลิงก์ไปยังฟีด youtube ที่คุณพูดถึงไหม ฉันค้นหา "ผู้เชี่ยวชาญ Android UX" และ "Android UX" แต่ไม่แน่ใจว่าวิดีโอที่คุณกำลังพูดถึงอยู่ทั้งหมด
ฉัน -

2
ไม่ได้ดูอีกเลยเมื่อปีที่แล้ว ค้นหาผู้พัฒนา Android อย่างเป็นทางการพูดคุยเกี่ยวกับ UX
sandalone

1
ตัวอย่างหนึ่งของการพิจารณา: กิจกรรมมี parentActivity เพื่อให้เราสามารถสังเคราะห์ backstack ในขณะที่ป้อนจากการแจ้งเตือน แต่ฉันไม่คิดว่ามี parentFragment ดังกล่าว
fikr4n


@ToolmakerSteve ใช่มันคือ getParentFragment แต่มันไม่ใช่สิ่งที่ฉันหมายถึงเพื่อนดูdeveloper.android.com/guide/topics/manifest/…
fikr4n

129

ปรัชญาของฉันคือ:

สร้างกิจกรรมเฉพาะเมื่อจำเป็นจริงๆ ด้วยสแต็คด้านหลังที่พร้อมใช้งานสำหรับการทำรายการแยกส่วนฉันพยายามสร้างกิจกรรมน้อยที่สุดในแอพของฉัน นอกจากนี้การสื่อสารระหว่างส่วนต่าง ๆ นั้นง่ายกว่าการส่งข้อมูลไปมาระหว่างกิจกรรมต่างๆ

การเปลี่ยนกิจกรรมมีราคาแพงใช่ไหม อย่างน้อยฉันก็เชื่อ - เนื่องจากกิจกรรมเก่าจะต้องถูกทำลาย / หยุดชั่วคราว / หยุดผลักลงบนสแต็กและจากนั้นกิจกรรมใหม่จะต้องสร้าง / เริ่มต้น / กลับมาทำงานต่อ

มันเป็นเพียงปรัชญาของฉันตั้งแต่มีการนำชิ้นส่วนมาใช้


2
จริง แต่ตามที่คุณเขียนบางครั้งก็จำเป็นต้องใช้กิจกรรม ตัวอย่างหนึ่งคือหน้าจอกล้องซึ่งควรใช้ในโหมดแนวนอน อีกตัวอย่างหนึ่งคือหน้าจอการกำหนดค่าที่แสดงเมื่อคุณวางแอพที่กำหนดเอง (บน "เดสก์ท็อป" - แอปตัวเรียกใช้งาน)
นักพัฒนา android

ขอบคุณที่คุณตอบและแบ่งปันประสบการณ์ดังนั้นคุณคิดว่ามันเป็นแนวปฏิบัติที่ดีใน Android ที่จะ จำกัด แอปพลิเคชั่นไว้ที่กิจกรรมเดียวและใช้ Fragment สำหรับทุกหน้าจอหากสถาปัตยกรรมของแอปพลิเคชันอนุญาตหรือไม่
Emil Adz

1
ถ้าอย่างนั้นคุณจะแก้ปัญหาเรื่องเศษเสี้ยวที่จำเป็นต้องผ่าน "สถานะ" ของแต่ละคนได้อย่างไร? รัฐทั้งหมดในทุกส่วนของคุณจำเป็นต้องอาศัยอยู่ในกิจกรรมเดียวมิฉะนั้นคุณจะถูกบังคับให้ต้องใช้ซิงเกิล
Mr_E

36
ฉันไม่เชื่อว่าการสื่อสารระหว่างส่วนต่าง ๆ นั้นง่ายกว่าการส่งข้อมูลไปมาระหว่างกิจกรรม
Denny

3
อย่างน้อยonActivityResult()ก็ปลอดภัยและง่ายกว่าการเรียกคืนของชิ้นส่วน
CoolMind

59

ตามคำบรรยายของ Google (อาจเป็นที่นี่ฉันจำไม่ได้) คุณควรพิจารณาใช้ Fragments ทุกครั้งที่ทำได้เพราะจะทำให้รหัสของคุณง่ายต่อการบำรุงรักษาและควบคุม

อย่างไรก็ตามฉันคิดว่าในบางกรณีมันอาจซับซ้อนเกินไปเนื่องจากกิจกรรมที่โฮสต์ชิ้นส่วนจำเป็นต้องนำทาง / สื่อสารระหว่างกัน

ฉันคิดว่าคุณควรตัดสินใจด้วยตัวเองว่าอะไรดีที่สุดสำหรับคุณ ปกติแล้วมันจะไม่ยากที่จะแปลงกิจกรรมเป็นส่วนย่อยและในทางกลับกัน

ฉันได้สร้างโพสต์เกี่ยวกับดิลมาที่นี่ถ้าคุณต้องการอ่านเพิ่มเติม


5
ขอบคุณที่คุณตอบและแบ่งปันประสบการณ์ดังนั้นคุณคิดว่ามันเป็นแนวปฏิบัติที่ดีใน Android ที่จะ จำกัด แอปพลิเคชั่นไว้ที่กิจกรรมเดียวและใช้ Fragment สำหรับทุกหน้าจอหากสถาปัตยกรรมของแอปพลิเคชันอนุญาตหรือไม่
Emil Adz

ขึ้นอยู่กับโครงการ แต่ถ้าซับซ้อนเกินไปคุณก็สามารถแยกไปทำกิจกรรมต่าง ๆ ได้เช่นกัน อย่ากลัวที่จะใช้วิธีการใด ๆ คุณสามารถใช้ทั้งคู่ได้ บางทีบางครั้งมันอาจจะยากเกินไปสำหรับคุณที่จะใช้ชิ้นส่วนแทนที่จะเป็นกิจกรรม ฉันคิดว่าคุณควรลองใช้ชิ้นส่วนต่าง ๆ แต่อย่าบังคับให้มันอยู่ทุกหนทุกแห่งถ้ามันมากเกินไปในแบบของคุณ ...
นักพัฒนา Android

จะทำอย่างไรถ้าฉันต้องการให้ผลกระทบนี้ของ ActionBar ยังคงเหมือนเดิมและเนื้อหาทั้งหมดจะถูกเปลี่ยน? เป็นไปได้ไหมที่จะบรรลุสิ่งนี้ด้วยกิจกรรม
Emil Adz


27

ทำไมฉันถึงชอบแฟรกเมนต์มากกว่ากิจกรรมในทุกกรณี

  • กิจกรรมมีราคาแพง ในแฟรกเมนต์มุมมองและสถานะคุณสมบัติจะถูกแยกออก - เมื่อใดก็ตามที่แฟรกเมนต์อยู่ในbackstackมุมมองของมันจะถูกทำลาย ดังนั้นคุณสามารถแตกแฟรกเมนต์ได้มากกว่ากิจกรรม

  • Backstackการจัดการ ด้วยFragmentManagerมันง่ายต่อการล้างชิ้นส่วนทั้งหมดแทรกมากกว่าชิ้นส่วนและ Etcs แต่สำหรับกิจกรรมมันเป็นฝันร้ายที่จะจัดการกับสิ่งเหล่านั้น

  • วงจรชีวิตที่คาดการณ์ได้มาก ตราบใดที่กิจกรรมโฮสต์ไม่ได้ถูกรีไซเคิล ชิ้นส่วนที่อยู่ด้านหลังจะไม่ถูกรีไซเคิล ดังนั้นจึงเป็นไปได้ที่จะใช้FragmentManager::getFragments()เพื่อค้นหาชิ้นส่วนเฉพาะ (ไม่สนับสนุน)


สวัสดีฉันได้อ่านความคิดเห็นของคุณเกี่ยวกับข้อดีของ Frag over Act คุณมีโครงการใดที่จะแสดงเหมือนกันใน Github Repo ของคุณ?
Ümañgßürmån

24

ตั้งแต่Jetpack , แอปเดี่ยวกิจกรรมเป็นสถาปัตยกรรมที่แนะนำ ที่มีประโยชน์โดยเฉพาะอย่างยิ่งกับการนำทางสถาปัตยกรรมตัวแทน

แหล่ง


ขอบคุณสำหรับสิ่งนี้!
Simão Garcia

1
ฉันอ่านเกี่ยวกับ Jetpack เป็นครั้งแรกในวันนี้ :) เราสร้างแอพกิจกรรมเดียวตั้งแต่เปิดตัวแฟรกเมนต์ กิจกรรมหลากหลายมีความซับซ้อนมากขึ้น
เหลือเชื่อ

1
@TheincredibleJan คุณถูกต้องสถาปัตยกรรมแอปกิจกรรมเดี่ยวเป็นทางออกที่ดีกว่าก่อนที่ Jetpack
ฟรานซิส

12

ในความคิดของฉันมันไม่เกี่ยวข้องจริงๆ ปัจจัยสำคัญที่ต้องพิจารณาคือ

  1. คุณจะนำส่วนต่าง ๆ ของ UI มาใช้บ่อยเพียงใด (เช่นเมนู)
  2. แอพนี้สำหรับแท็บเล็ตด้วยหรือไม่?

การใช้ชิ้นส่วนหลักคือการสร้างกิจกรรมหลายอย่างซึ่งทำให้สมบูรณ์แบบสำหรับแอปตอบสนองแท็บเล็ต / โทรศัพท์


ฉันจะบอกว่าการใช้งานหลักของชิ้นส่วนคือการสร้างมุมมองที่กำหนดเองโดยไม่คิดว่ามันเป็นมุมมองที่กำหนดเอง นั่นคือสิ่งที่เกิดขึ้นอย่างไรก็ตาม ในตอนแรกเรามีการแสดงส่วนย่อยจาก Google เป็นวิธีที่สะดวกในการสร้างแอปที่ตอบสนองต่อแท็บเล็ตดังนั้นคุณสามารถติดไว้ในกิจกรรมต่างๆได้หากต้องการ วิธีในการแนบโค้ดเข้ากับมุมมองมากขึ้นหรือน้อยลงและกำหนดให้สามารถติดตำแหน่งที่คุณต้องการได้ (โดยไม่ต้องสร้างมุมมองที่กำหนดเอง)
Lassi Kinnunen

11

อย่าลืมว่ากิจกรรมนั้นเป็นบล็อก / องค์ประกอบของแอปพลิเคชันซึ่งสามารถแบ่งปันและเริ่มต้นได้ด้วยเจตนา! ดังนั้นแต่ละกิจกรรมในแอปพลิเคชันของคุณควรแก้ไขงานประเภทเดียวเท่านั้น หากคุณมีเพียงงานเดียวในใบสมัครของคุณฉันคิดว่าคุณต้องการเพียงหนึ่งกิจกรรมและชิ้นส่วนจำนวนมากหากจำเป็น แน่นอนคุณสามารถนำชิ้นส่วนต่าง ๆ กลับมาใช้ใหม่ในกิจกรรมในอนาคตซึ่งแก้ปัญหางานอื่นได้ วิธีการนี้จะมีความชัดเจนและแยกตรรกะของงาน และคุณไม่จำเป็นต้องดูแลกิจกรรมหนึ่งกิจกรรมด้วยพารามิเตอร์ตัวกรองเจตนาที่แตกต่างกันสำหรับชุดชิ้นส่วนที่แตกต่างกัน คุณกำหนดงานในขั้นตอนการออกแบบของกระบวนการพัฒนาตามข้อกำหนด


ในแอปพลิเคชั่นของเรางานประเภทหนึ่งของกิจกรรมคือเก็บลิ้นชักการนำทางเพื่อป้อนชิ้นส่วนต่าง ๆ :) ทำไมฉันต้องต่อสู้กับความตั้งใจในการแตกหัก? มีความชัดเจนและสมเหตุสมผลในการอ้างอิงแบบคงที่ไปยังคลาสข้อมูล "สากล" สำหรับข้อมูลทั่วโลกและส่งผ่านค่าบางอย่างไปยังวิธีสร้างอินสแตนซ์ของส่วน
เหลือเชื่อ

9

มีสิ่งนี้มากกว่าที่คุณรู้คุณต้องจำไว้ว่ากิจกรรมที่เปิดตัวไม่ทำลายกิจกรรมการโทรโดยปริยาย แน่นอนคุณสามารถตั้งค่าเพื่อให้ผู้ใช้ของคุณคลิกปุ่มเพื่อไปที่หน้าคุณเริ่มกิจกรรมของหน้านั้นและทำลายหนึ่งในปัจจุบัน ทำให้เกิดค่าใช้จ่ายจำนวนมาก แนวทางที่ดีที่สุดที่ฉันสามารถให้คุณได้คือ:

** เริ่มกิจกรรมใหม่เฉพาะในกรณีที่เหมาะสมที่จะมีกิจกรรมหลักและกิจกรรมนี้เปิดในเวลาเดียวกัน (คิดหลายหน้าต่าง)

ตัวอย่างที่ดีของการมีหลายกิจกรรมคือ Google Drive กิจกรรมหลักจัดเตรียมไฟล์สำรวจ เมื่อเปิดไฟล์กิจกรรมใหม่จะเริ่มขึ้นเพื่อดูไฟล์นั้น คุณสามารถกดปุ่มแอพล่าสุดที่จะช่วยให้คุณกลับไปที่เบราว์เซอร์โดยไม่ต้องปิดเอกสารที่เปิดอยู่หรืออาจเปิดเอกสารอื่นขนานกับเอกสารแรก


เรื่อง"เริ่มกิจกรรมใหม่ก็ต่อเมื่อมันเหมาะสมที่จะมีกิจกรรมหลักและกิจกรรมนี้เปิดในเวลาเดียวกัน (คิดหลายหน้าต่าง)" ฉันไม่คิดอย่างนั้น สถานการณ์นั้นได้รับการแก้ไขอย่างดีโดยใช้ชิ้นส่วน attach / detachวิธีการ
ToolmakerSteve

7

สิ่งที่ฉันทำ: ใช้ชิ้นส่วนน้อยลงเมื่อเป็นไปได้ น่าเสียดายที่เกือบเป็นไปได้ ดังนั้นฉันเลยจบด้วยเศษเล็กเศษน้อยและกิจกรรมเล็ก ๆ น้อย ๆ ข้อบกพร่องบางอย่างที่ฉันรับรู้:

  • ActionBar& เมนู: เมื่อ 2 ส่วนมีชื่อแตกต่างกันเมนูที่
    จะจัดการได้ยาก เช่นเมื่อเพิ่มชิ้นส่วนใหม่คุณสามารถเปลี่ยนชื่อแถบการกระทำได้ แต่เมื่อนำมาแยกใหม่backstackนั้นจะไม่มีวิธีกู้คืนชื่อเก่า คุณอาจต้องใช้ Toolbar ทุก ๆ ส่วนสำหรับกรณีนี้ แต่ให้ฉันเชื่อว่าจะใช้เวลาของคุณมากขึ้น
  • เมื่อเราต้องการstartForResultกิจกรรมก็มี แต่ส่วนไม่ได้
  • ไม่มีภาพเคลื่อนไหวการเปลี่ยนแปลงตามค่าเริ่มต้น

วิธีแก้ปัญหาของฉันคือใช้กิจกรรมเพื่อห่อส่วนที่อยู่ด้านใน ดังนั้นเราจึงมีแถบแอ็คชั่นเมนูstartActivityForResultภาพเคลื่อนไหว ...


1
คะแนนมีประโยชน์มากขอบคุณ คุณช่วยอธิบาย " กิจกรรมเพื่อตัดส่วน " ได้หรือไม่? คุณได้ทำกิจกรรมแยกต่างหากสำหรับแต่ละส่วนหรือไม่ ถ้าเป็นเช่นนั้นคุณต้องการแฟรกเมนต์หรือไม่?
ToolmakerSteve

3
มีวิธีการคืนค่าชื่อและสิ่งต่าง ๆ ใช้getSupportFragmentManager().addOnBackStackChangedListenerเพื่อเพิ่มฟัง รับแฟรกเมนต์ปัจจุบันใน listener นั้นจากนั้นตั้งค่าหัวเรื่องและเนื้อหา
babay

4

ข้อได้เปรียบที่สำคัญข้อหนึ่งของfragmentover over activity คือรหัสที่ใช้สำหรับแฟรกเมนต์สามารถใช้สำหรับกิจกรรมที่แตกต่างกันดังนั้นจึงให้การใช้งานโค้ดในการพัฒนาแอปพลิเคชันอีกครั้ง


3
อย่างไร? โปรดให้ตัวอย่างหน่อยได้ไหม?
sofs1

1
@ sofs1 คำถามของคุณไม่สมเหตุสมผลนัก โค้ดใด ๆ ในแฟรกเมนต์ยังคงเหมือนเดิมไม่ว่ากิจกรรมจะเป็นส่วนใดก็ตาม
เหลือเชื่อ

@TheincredibleJan แต่เราไม่สามารถพูดว่า "รหัสใด ๆ ในกิจกรรมยังคงเหมือนเดิมไม่ว่ากิจกรรมที่สองจะถูกสร้างอินสแตนซ์" ฉันไม่เห็นความแตกต่าง
iforce2d

3

ใช้หนึ่งกิจกรรมต่อแอพพลิเคชั่นเพื่อเป็นฐานสำหรับfragment ใช้งานfragmentบนหน้าจอ fragmentsมีน้ำหนักเบาเมื่อเทียบกับactivites ชิ้นส่วนเป็นชิ้นส่วนที่ใช้ซ้ำ ได้เหมาะสำหรับแอพที่รองรับทั้งโทรศัพท์และแท็บเล็ต


2

คุณมีอิสระที่จะใช้อย่างใดอย่างหนึ่ง
โดยทั่วไปคุณต้องประเมินว่าแอปไหนดีที่สุดสำหรับแอปของคุณ คิดเกี่ยวกับวิธีที่คุณจะจัดการการไหลของธุรกิจและวิธีการจัดเก็บ / จัดการการตั้งค่าข้อมูล

ลองคิดดูว่าชิ้นส่วนเก็บข้อมูลขยะอย่างไร เมื่อคุณใช้แฟรกเมนต์คุณมีรูทกิจกรรมเพื่อเติมด้วยแฟรกเมนต์ ดังนั้นหากคุณพยายามที่จะใช้กิจกรรมจำนวนมากที่มีชิ้นส่วนมากเกินไปคุณต้องพิจารณาประสิทธิภาพในแอปของคุณเพราะคุณกำลังจัดการ (พูดอย่างหยาบ ๆ ) สองรอบบริบทให้จำความซับซ้อน

โปรดจำไว้ว่า: ฉันควรใช้ชิ้นส่วนต่างๆ ทำไมฉันไม่ควร?

ความนับถือ.


1

ฉันใช้ Fragments เพื่อประสบการณ์การใช้งานที่ดีขึ้น ตัวอย่างเช่นถ้าคุณมีปุ่มและคุณต้องการเรียกใช้สมมุติว่าเว็บเซอร์เมื่อคุณคลิกฉันจะแนบแฟรกเมนต์กับกิจกรรมหลัก

if (id == R.id.forecast) {

    ForecastFragment forecastFragment = new ForecastFragment();
    FragmentManager fm = getSupportFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    ft.replace(R.id.main_content, forecastFragment);
    ft.addToBackStack("backstack");
    forecastFragment.setArguments(b);
    ft.commit();
}

ด้วยวิธีนี้ผู้ใช้จะไม่ต้องย้ายไปทำกิจกรรมอื่น

และอย่างที่สองฉันชอบ Fragments เพราะคุณสามารถจัดการกับมันได้อย่างง่ายดายระหว่างการหมุน


ทำให้ตัวอย่างนั้นเป็นประสบการณ์ของผู้ใช้ที่ดีขึ้นอย่างไร พวกเขาจะรู้ได้อย่างไร (หรือสนใจ) ว่าพวกเขากำลังทำกิจกรรมหรือชิ้นส่วน?
iforce2d

1

มันขึ้นอยู่กับสิ่งที่คุณต้องการสร้าง ตัวอย่างเช่นการnavigation drawerใช้ชิ้นส่วน ใช้แท็บfragmentsเช่นกัน listviewอีกประการหนึ่งการดำเนินงานที่ดีเป็นที่ที่คุณมี เมื่อคุณหมุนโทรศัพท์และคลิกแถวกิจกรรมจะปรากฏในครึ่งที่เหลือของหน้าจอ ส่วนตัวผมใช้fragmentsและfragment dialogsเนื่องจากเป็นมืออาชีพมากขึ้น นอกจากนี้ยังมีการจัดการที่ง่ายขึ้นในการหมุน

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