คำถามของฉันคือนอกเหนือจากความแตกต่างที่เห็นได้ชัดมรดกสิ่งที่เป็นความแตกต่างที่สำคัญระหว่างFragmentและFragmentActivity? แต่ละสถานการณ์เหมาะสมกับสถานการณ์ใดที่สุด ฉันพยายามเข้าใจว่าทำไมทั้งสองคลาสนี้ถึงมีอยู่ ...
คำถามของฉันคือนอกเหนือจากความแตกต่างที่เห็นได้ชัดมรดกสิ่งที่เป็นความแตกต่างที่สำคัญระหว่างFragmentและFragmentActivity? แต่ละสถานการณ์เหมาะสมกับสถานการณ์ใดที่สุด ฉันพยายามเข้าใจว่าทำไมทั้งสองคลาสนี้ถึงมีอยู่ ...
คำตอบ:
A Fragmentคือส่วนของ a Activityซึ่งมี:
Activityกำลังทำงานจะต้องฝังอยู่ในFragmentActivity
Fragmentsไม่ได้เป็นส่วนหนึ่งของ API ก่อนหน้า HoneyComb (3.0) หากคุณต้องการที่จะใช้Fragmentsในแอปกำหนดเป้าหมายแพลตฟอร์มรุ่นก่อนที่จะมีรังผึ้งคุณต้องเพิ่มแพคเกจการสนับสนุนโครงการของคุณและใช้ในการถือของคุณFragmentActivity ชั้นจะมี API สำหรับการจัดการกับในขณะที่ระดับก่อนที่จะมีรังผึ้งไม่FragmentsFragmentActivityFragmentsActivity
หากโครงการของคุณกำหนดเป้าหมายรังผึ้งหรือใหม่กว่าเท่านั้นคุณควรใช้Activityและไม่ได้ที่จะถือของคุณFragmentActivityFragments
รายละเอียดบางอย่าง:
ใช้กับandroid.app.Fragment Activityใช้กับandroid.support.v4.app.Fragment FragmentActivityอย่าเพิ่มแพ็คเกจการสนับสนุนFragmentลงในActivityเนื่องจากจะทำให้เกิดข้อยกเว้น
สิ่งที่ต้องระวัง: FragmentManagerและLoaderManagerมีรุ่นสนับสนุนแยกต่างหากสำหรับ FragmentActivity:
หากคุณใช้FragmentในActivity(HoneyComb ขึ้นไป) ให้โทร
getFragmentManager() เพื่อรับ android.app.FragmentManagergetLoaderManager() เพื่อรับ android.app.LoaderManagerหากคุณกำลังใช้ a FragmentในFragmentActivity(pre-HoneyComb) โทร:
getSupportFragmentManager()android.support.v4.app.FragmentManagerที่จะได้รับgetSupportLoaderManager() เพื่อรับ android.support.v4.app.LoaderManagerดังนั้นอย่าทำ
//don't do this
myFragmentActivity.getLoaderManager();
//instead do this:
myFragmentActivity.getSupportLoaderManager();
หรือ
//don't do this:
android.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager();
//instead do this:
android.support.v4.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager()
ประโยชน์ที่ควรทราบคือในขณะที่ต้องมีการแยกส่วนในActivityนั้นไม่จำเป็นต้องเป็นส่วนหนึ่งของActivityเค้าโครง สามารถใช้เป็นพนักงานที่มองไม่เห็นสำหรับกิจกรรมโดยไม่มี UI ของมันเอง
FragmentActivity เป็นกิจกรรมคลาสสิกของเราด้วยการสนับสนุนการแยกส่วนไม่มีอะไรเพิ่มเติม ดังนั้น FragmentActivity จึงเป็นสิ่งจำเป็นเมื่อ Fragment จะถูกแนบกับกิจกรรม
Well Fragment เป็นองค์ประกอบที่ดีที่คัดลอกพฤติกรรมพื้นฐานของกิจกรรม แต่ยังไม่ใช่องค์ประกอบของแอปพลิเคชันแบบสแตนด์อะโลนเช่นกิจกรรมและจำเป็นต้องแนบกับกิจกรรมเพื่อที่จะทำงาน
ดูที่นี่สำหรับรายละเอียดเพิ่มเติม
คิดว่า FragmentActivity เป็นคลาสกิจกรรมปกติที่สามารถรองรับ Fragments ได้ ก่อนที่จะมีรังผึ้งคลาสกิจกรรมไม่สามารถแทนที่แฟรกเมนต์โดยตรงดังนั้นจำเป็นต้องมีในกิจกรรมที่ใช้แฟรกเมนต์
หากการกระจายเป้าหมายของคุณคือ Honeycomb และมากกว่านั้นคุณสามารถขยายออกจากกิจกรรมแทน
นอกจากนี้แฟรกเมนต์จะถูกพิจารณาเป็น 'กิจกรรมย่อย' ไม่สามารถอยู่ได้หากไม่มีกิจกรรม คิดว่าส่วนย่อยเป็นกิจกรรมย่อยและคุณควรจะดี ดังนั้นกิจกรรมน่าจะเป็นของผู้ปกครองและส่วนย่อยของความสัมพันธ์เชิงสัญลักษณ์ของเด็ก
FragmentActivity เป็นกิจกรรมแบบเฉพาะกิจที่มี Fragment ในคำพูดเหล่านี้ผมได้อธิบายคุณเกี่ยวกับการเปลี่ยนแปลงที่สำคัญอย่างหนึ่งซึ่งกับ android 3.0 (HoneyComb) ทีม android ได้แทรกลงใน android sdk
ด้วยแนวคิดรูปแบบใหม่เหล่านี้โค้ดและเลย์เอาต์ของคุณจะยืดหยุ่นและบำรุงรักษาได้มากขึ้น หากคุณค้นหาใน google มีตัวอย่างมากมาย