คำถามของฉันคือนอกเหนือจากความแตกต่างที่เห็นได้ชัดมรดกสิ่งที่เป็นความแตกต่างที่สำคัญระหว่างFragment
และFragmentActivity
? แต่ละสถานการณ์เหมาะสมกับสถานการณ์ใดที่สุด ฉันพยายามเข้าใจว่าทำไมทั้งสองคลาสนี้ถึงมีอยู่ ...
คำถามของฉันคือนอกเหนือจากความแตกต่างที่เห็นได้ชัดมรดกสิ่งที่เป็นความแตกต่างที่สำคัญระหว่างFragment
และFragmentActivity
? แต่ละสถานการณ์เหมาะสมกับสถานการณ์ใดที่สุด ฉันพยายามเข้าใจว่าทำไมทั้งสองคลาสนี้ถึงมีอยู่ ...
คำตอบ:
A Fragment
คือส่วนของ a Activity
ซึ่งมี:
Activity
กำลังทำงานจะต้องฝังอยู่ในFragment
Activity
Fragments
ไม่ได้เป็นส่วนหนึ่งของ API ก่อนหน้า HoneyComb (3.0) หากคุณต้องการที่จะใช้Fragments
ในแอปกำหนดเป้าหมายแพลตฟอร์มรุ่นก่อนที่จะมีรังผึ้งคุณต้องเพิ่มแพคเกจการสนับสนุนโครงการของคุณและใช้ในการถือของคุณFragmentActivity
ชั้นจะมี API สำหรับการจัดการกับในขณะที่ระดับก่อนที่จะมีรังผึ้งไม่Fragments
FragmentActivity
Fragments
Activity
หากโครงการของคุณกำหนดเป้าหมายรังผึ้งหรือใหม่กว่าเท่านั้นคุณควรใช้Activity
และไม่ได้ที่จะถือของคุณFragmentActivity
Fragments
รายละเอียดบางอย่าง:
ใช้กับandroid.app.Fragment
Activity
ใช้กับandroid.support.v4.app.Fragment
FragmentActivity
อย่าเพิ่มแพ็คเกจการสนับสนุนFragment
ลงในActivity
เนื่องจากจะทำให้เกิดข้อยกเว้น
สิ่งที่ต้องระวัง: FragmentManager
และLoaderManager
มีรุ่นสนับสนุนแยกต่างหากสำหรับ FragmentActivity:
หากคุณใช้Fragment
ในActivity
(HoneyComb ขึ้นไป) ให้โทร
getFragmentManager()
เพื่อรับ android.app.FragmentManager
getLoaderManager()
เพื่อรับ 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 มีตัวอย่างมากมาย