กิจกรรม AppCompatActivity, FragmentActivity และ ActionBarActivity: เมื่อใดที่จะใช้


266

ฉันมาจาก iOS ที่ง่ายและคุณใช้ UIViewController อย่างไรก็ตามในสิ่งที่ Android ดูเหมือนซับซ้อนมากขึ้นด้วย UIComponents บางอย่างสำหรับระดับ API ที่เฉพาะเจาะจง ฉันอ่าน BigNerdRanch สำหรับ Android (หนังสือเล่มนี้คือประมาณ 2 ปี) และพวกเขาแนะนำให้ผมใช้ในการเป็นเจ้าภาพของฉันActivity FragmentActivitiesอย่างไรก็ตามฉันคิดว่าActivityเลิกใช้แล้ว

ดังนั้นสำหรับ API ระดับ 22 (ด้วยการสนับสนุนขั้นต่ำสำหรับ API ระดับ 15 หรือ 16) ฉันควรใช้ทั้งสองอย่างในการโฮสต์ส่วนประกอบและส่วนประกอบเองอย่างไร มีการใช้สำหรับสิ่งเหล่านี้ทั้งหมดหรือฉันควรใช้เพียงหนึ่งหรือสองอย่าง


1
คุณจะไม่เป็นเจ้าภาพFragmentActivityIES คุณเป็นโฮสต์Fragmentของ สำหรับ Android เวอร์ชันใหม่กว่านั้นActivityคลาสได้รับการอัพเดตเพื่อโฮสต์โดยตรง เพื่อรองรับรุ่นเก่าที่FragmentActivityถูกนำมาใช้
Ravi Thapliyal

5
ในทำนองเดียวกันกับ API 11 + โอบอุ้มได้รับการสนับสนุนให้มีการActivity ActionBarนี้ได้รับการสนับสนุนในรุ่นเก่าผ่านครั้งแรกซึ่งขณะนี้ได้รับการคัดค้านและแทนที่ด้วยActionBarActivity AppCompatActivityเนื่องจากทั้งสองคลาสเหล่านี้มีขนาดกว้างขึ้นFragmentActivityจึงสนับสนุนโฮสติ้งFragmentเช่นกัน
Ravi Thapliyal

คำตอบ:


327

ฉันคิดว่ากิจกรรมเลิกใช้แล้ว

เลขที่

ดังนั้นสำหรับ API ระดับ 22 (ด้วยการสนับสนุนขั้นต่ำสำหรับ API ระดับ 15 หรือ 16) ฉันควรใช้ทั้งสองอย่างในการโฮสต์ส่วนประกอบและส่วนประกอบเองอย่างไร มีการใช้สำหรับสิ่งเหล่านี้ทั้งหมดหรือฉันควรใช้เพียงหนึ่งหรือสองอย่าง

Activityเป็นพื้นฐาน ทุกกิจกรรมสืบทอดจากActivityโดยตรงหรือโดยอ้อม

FragmentActivityใช้สำหรับ backport ของแฟรกเมนต์ที่พบในsupport-v4และsupport-v13ไลบรารี การติดตั้งแฟรกเมนต์แบบเนทีฟดั้งเดิมถูกเพิ่มใน API ระดับ 11 ซึ่งต่ำกว่าminSdkVersionค่าที่คุณเสนอ เหตุผลเดียวที่คุณจะต้องพิจารณาFragmentActivityโดยเฉพาะคือถ้าคุณต้องการใช้ชิ้นส่วนซ้อนกัน (ส่วนที่ถือชิ้นส่วนอื่น) เนื่องจากไม่ได้รับการสนับสนุนในชิ้นส่วนดั้งเดิมจนถึงระดับ API 17

AppCompatActivityมาจากappcompat-v7ห้องสมุด โดยพื้นฐานแล้วสิ่งนี้จะนำเสนอ backport ของแถบการกระทำ เนื่องจากเพิ่มแถบแอ็คชั่นเนทีฟใน API ระดับ 11 คุณไม่จำเป็นต้องทำเช่นAppCompatActivityนั้น อย่างไรก็ตามเวอร์ชันปัจจุบันของappcompat-v7ยังเพิ่ม backport ที่ จำกัด ของสุนทรียศาสตร์การออกแบบวัสดุในแง่ของแถบการกระทำและวิดเจ็ตต่างๆ มีข้อดีข้อเสียของการใช้appcompat-v7งานอยู่นอกเหนือขอบเขตของคำตอบ Stack Overflow ที่เฉพาะเจาะจงนี้

ActionBarActivityappcompat-v7เป็นชื่อเก่าของกิจกรรมฐานจาก ด้วยเหตุผลต่าง ๆ พวกเขาต้องการเปลี่ยนชื่อ นอกจากห้องสมุดของบุคคลที่สามที่คุณใช้ยืนยันActionBarActivityคุณควรเลือกAppCompatActivityมากกว่าActionBarActivityมากกว่า

ดังนั้นminSdkVersionในช่วง 15-16 ของคุณ:

  • หากคุณต้องการรูปลักษณ์การออกแบบวัสดุที่ใช้ย้อนหลังให้ใช้ AppCompatActivity

  • ถ้าไม่ใช่ แต่คุณต้องการชิ้นส่วนซ้อนกันให้ใช้ FragmentActivity

  • ถ้าไม่ใช้ Activity

เพียงแค่เพิ่มจากความคิดเห็นเป็นหมายเหตุ: การAppCompatActivityขยายFragmentActivityเพื่อให้ทุกคนที่ต้องการใช้คุณลักษณะของการใช้งานสามารถFragmentActivityAppCompatActivity


ถ้าฉันต้องการใช้การออกแบบวัสดุและต้องการแฟรกเมนต์ซ้อนกัน? AppCompatActivity สืบทอดมาจาก FragmentActivity หรือไม่
Orcun Sevsay

4
@MiloRambaldi: ใช่เป็นบรรพบุรุษของFragmentActivity AppCompatActivityในขณะที่ฉันไม่แนะนำให้ใช้ชิ้นส่วนซ้อนกันในระดับที่ชิ้นส่วนซ้อนกันทำงานได้ทั้งหมดAppCompatActivityจะสนับสนุนชิ้นส่วนซ้อนกัน
CommonsWare

ขอบคุณสำหรับคำตอบโดยละเอียด @CommonsWare คุณสามารถบอกได้ว่า minSDK ใดที่จะอนุญาตให้ใช้Activityประโยชน์จากข้อมูลล่าสุดได้โดยไม่ต้องsupport-v7มีการออกแบบวัสดุที่ไม่ใช่ backported เป้าหมายของฉันคือต่ำสุด 19 เป้าหมาย 25
jugutier

1
@jugutier: ในการใช้งานTheme.Materialคุณต้องมีminSdkVersion21 หรือสูงกว่า
CommonsWare

83

Activityเป็นคลาสพื้นฐานของกิจกรรมอื่น ๆ ทั้งหมดฉันไม่คิดว่ามันจะถูกคัดค้าน ความสัมพันธ์ระหว่างพวกเขาคือ:

Activity<- FragmentActivity<- AppCompatActivity<-ActionBarActivity

'<-' หมายถึงการสืบทอดที่นี่ การอ้างอิงดังกล่าวActionBarActivityเลิกใช้แล้วใช้AppCompatActivityแทน

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

  • Activity เป็นพื้นฐานหนึ่ง
  • ขึ้นอยู่กับActivity, มีความสามารถในการใช้งานFragmentActivityFragment
  • ขึ้นอยู่กับFragmentActivity, มีคุณสมบัติที่จะAppCompatActivityActionBar

2
คำตอบที่สง่างาม
M.kazem Akhgary

69

2019: การใช้งาน AppCompatActivity

ในช่วงเวลาของการเขียนนี้ (ตรวจสอบลิงค์เพื่อยืนยันว่ามันยังคงเป็นจริง), เอกสาร Androidแนะนำให้ใช้AppCompatActivityถ้าคุณใช้ App Bar

นี่คือเหตุผลที่ได้รับ:

เริ่มต้นด้วย Android 3.0 (API ระดับ 11) กิจกรรมทั้งหมดที่ใช้ชุดรูปแบบเริ่มต้นมี ActionBar เป็นแถบแอป อย่างไรก็ตามคุณสมบัติของแถบแอปได้ถูกเพิ่มเข้าไปใน ActionBar ดั้งเดิมผ่านทาง Android รุ่นต่างๆ ผลที่ได้คือ ActionBar ดั้งเดิมนั้นทำงานแตกต่างกันไปขึ้นอยู่กับรุ่นของระบบ Android ที่อุปกรณ์อาจใช้งานอยู่ ในทางตรงกันข้ามฟีเจอร์ล่าสุดจะถูกเพิ่มไปยัง Toolbar ของไลบรารีการสนับสนุนและมีอยู่ในอุปกรณ์ใด ๆ ที่สามารถใช้ไลบรารีการสนับสนุน

ด้วยเหตุนี้คุณควรใช้คลาส Toolbar ของไลบรารีการสนับสนุนเพื่อใช้แถบแอพของกิจกรรม การใช้แถบเครื่องมือของไลบรารีการสนับสนุนช่วยให้มั่นใจได้ว่าแอปของคุณจะมีพฤติกรรมที่สอดคล้องกันในอุปกรณ์หลากหลายประเภท ตัวอย่างเช่นวิดเจ็ต Toolbar มอบประสบการณ์การออกแบบวัสดุบนอุปกรณ์ที่ใช้ Android 2.1 (API ระดับ 7) หรือใหม่กว่า แต่แถบแอ็คชั่นเนทีฟไม่รองรับการออกแบบวัสดุเว้นแต่ว่าอุปกรณ์นั้นใช้ Android 5.0 (API ระดับ 21) ขึ้นไป

คำแนะนำทั่วไปสำหรับการเพิ่มแถบเครื่องมือคือ

  1. เพิ่มไลบรารีการสนับสนุนของแอป v7
  2. ทำให้กิจกรรมทั้งหมดของคุณขยายออกไป AppCompatActivity
  3. ในการประกาศ Manifest NoActionBarที่คุณต้องการ
  4. เพิ่ม a ToolBarไปยังโครงร่าง xml ของแต่ละกิจกรรม
  5. ได้รับในแต่ละกิจกรรมเป็นToolBaronCreate

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


สวัสดี @Suragch ขอบคุณสำหรับสิ่งนี้ สมมติว่าฉันกำลังสร้างแอพในวันนี้ที่รองรับ 21 เท่านั้น อันที่จริงแล้วมันเกิดขึ้นฉันไม่ต้องการเลยทีเดียวแถบแอ็คชั่นหรือแถบแอพ (มากกว่าแอพแบบเต็มหน้าจอ) สตูดิโอจะแนะนำ (พฤศจิกายน 16) ผมอาจจะใช้"ย้อนกลับเข้ากันได้ (AppCompat)" สัญชาตญาณของฉันคือไม่ใช้ AppCompat ความคิดเห็นของผู้เชี่ยวชาญของคุณคืออะไร? ฉันขอบคุณได้เท่านั้น
Fattie

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

50

สำหรับระดับต่ำสุด API ของ 15 AppCompatActivityคุณต้องการที่จะใช้ ตัวอย่างเช่นคุณMainActivityจะมีลักษณะเช่นนี้:

public class MainActivity extends AppCompatActivity {
    ....
    ....
}

หากต้องการใช้AppCompatActivityให้แน่ใจว่าคุณดาวน์โหลดไลบรารีสนับสนุนของ Google (คุณสามารถตรวจสอบได้ในเครื่องมือ -> Android -> ตัวจัดการ SDK) จากนั้นให้รวมการพึ่งพาการไล่ระดับสีในไฟล์ gradle.build ของแอปของคุณ:

compile 'com.android.support:appcompat-v7:22:2.0'

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

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


ตกลงฉันมีการอ้างอิงนั้นในไฟล์ gradle.build ของฉัน ตัวอย่างเช่นถ้าฉันสร้างตารางที่มีหลายแถว (เช่นแอปพลิเคชัน Notes) หน้าจอหลักของฉันจะเป็น AppCompat และอะไรอีกที่โฮสต์จะเป็น AppCompat ด้วย? ฉันจำเป็นต้องใช้ AppCompat หรือไม่?
Jameson

AppCompat ของคุณจะขยายโครงร่างทรัพยากรบางอย่างที่ระบุการออกแบบ (ตารางที่มีกลุ่มของแถว) แต่สมมติว่าคุณต้องการเปิดหน้าใหม่เมื่อคุณคลิกที่แถว คุณสามารถตั้งค่า onClickListener เพื่อเปิด AppCompat Activity หรือ Fragment ใหม่
adao7000

ตั้งแต่วันที่ 3 สิงหาคม BigNerdRanch มีหนังสือรุ่นใหม่: amazon.com/Android-Programming-Nerd-Ranch-Guide/dp/0134171454/ …
bryant1410

1
@ adao7000 เพื่อนที่ได้กล่าวถึงว่าสำหรับ 15 หรือสูงกว่าคุณสามารถใช้ AppCompatActivity - ฉันคิดว่า v7 ใน android.support.v7.app สำหรับ sdk ขั้นต่ำที่ต้องการคือ 7
รหัสโดย

1
@codebased android.support.v7 สามารถใช้งานได้ที่ระดับ API 9 ที่มา: developer.android.com/topic/l
ไลบรารี/support

30

Activityclass เป็นคลาสพื้นฐาน (ดั้งเดิม) รองรับการจัดการ Fragment (ตั้งแต่ API 11) ไม่แนะนำให้ใช้อีกต่อไปเพราะมันบริสุทธิ์เพราะความเชี่ยวชาญที่ดีกว่า

ActionBarActivityเป็นช่วงเวลาหนึ่งที่แทนที่คลาสกิจกรรมเพราะมันง่ายต่อการจัดการกับ ActionBar ในแอป

AppCompatActivityเป็นวิธีการใหม่ที่จะไปเพราะ ActionBar ไม่ได้รับการสนับสนุนอีกต่อไปและคุณควรใช้ Toolbar แทน (ที่กำลังเป็นทดแทน ActionBar) AppCompatActivity สืบทอดมาจาก FragmentActivity ดังนั้นหากคุณต้องการจัดการกับ Fragments คุณสามารถ (ผ่าน Fragment Manager) AppCompatActivity มีไว้สำหรับ API ใด ๆ ไม่ใช่แค่ 16+ เท่านั้น (ใครบอกว่าเป็นแบบนั้น) คุณสามารถใช้งานได้โดยเพิ่มไฟล์ Gradle ของคุณ ฉันใช้มันใน API 10 และใช้งานได้สมบูรณ์compile 'com.android.support:appcompat-v7:24:2.0'


1
"ActionBar เลิกใช้แล้ว" - แถบการกระทำไม่ได้รับการสนับสนุน "คุณจำเป็นต้องใช้แถบเครื่องมือแทน" - Toolbarปพลิเคชันไม่จำเป็นต้องใช้
CommonsWare

@CommonsWare Ok ไม่มีการคัดค้าน แต่การใช้งานไม่ได้รับการสนับสนุนอีกต่อไปในรูปแบบที่บริสุทธิ์มากขึ้น (เก่า) ตอนนี้ถ้าคุณต้องการมีแถบการกระทำในแอปของคุณคุณควรเพิ่มด้วยตนเองโดยใช้แถบเครื่องมือ
Joaquin Iurchuk

"การใช้งานไม่ได้รับการสนับสนุนอีกต่อไปในรูปแบบที่บริสุทธิ์ยิ่งขึ้น" - ฉันไม่เคยเห็นอะไรเลยในเอกสารหรือโพสต์บล็อกอย่างเป็นทางการที่จะพิสูจน์การเรียกร้องของคุณ คุณมีลิงค์หรือไม่?
CommonsWare

@CommonsWare คุณคือผู้มีชื่อเสียงที่นี่และคุณพูดถูก แนวทางการออกแบบวัสดุเท่านั้นที่แนะนำให้ใช้ Toolbar เป็นแถบการกระทำ บางทีฉันควรลบคำตอบของฉันเนื่องจากไม่แม่นยำ ขอบคุณ
Joaquin Iurchuk

2
เริ่มต้นด้วย Support Library เวอร์ชัน 26.0.0 (เปิดตัวในเดือนกรกฎาคม 2017) ระดับ API ขั้นต่ำที่รองรับได้เปลี่ยนเป็น Android 4.0 (ระดับ API 14) สำหรับแพ็คเกจไลบรารีสนับสนุนทั้งหมด แหล่งที่มา: developer.android.com/topic/l
ไลบรารี/support-library/…

12

มีความสับสนมากมายที่นี่โดยเฉพาะถ้าคุณอ่านแหล่งข้อมูลที่ล้าสมัย

พื้นฐานหนึ่งคือActivityซึ่งสามารถแสดงชิ้นส่วน คุณสามารถใช้ชุดค่าผสมนี้หากคุณใช้เวอร์ชั่น Android> 4

อย่างไรก็ตามยังมีห้องสมุดการสนับสนุนซึ่งครอบคลุมชั้นเรียนอื่น ๆ ที่คุณกล่าวถึง: FragmentActivity, ActionBarActivityและAppCompatและเดิมทีพวกมันถูกใช้เพื่อรองรับแฟรกเมนต์ใน Android เวอร์ชัน <4 แต่จริงๆแล้วพวกมันยังเคยชินกับการทำงานของ backport จาก Android เวอร์ชั่นใหม่กว่า (ตัวอย่างเช่นการออกแบบวัสดุ)

ล่าสุดคือAppCompatอีก 2 คนที่มีอายุมากกว่า กลยุทธ์ที่ฉันใช้คือใช้เสมอAppCompatเพื่อให้แอปพร้อมในกรณีที่มี backport จาก Android รุ่นอนาคต


ขอบคุณ! ตกลงดังนั้นฉันสามารถใช้ AppCompat แทน Activity เพื่อโฮสต์ ... อะไร หากต้องการโฮสต์ AppCompats อื่น ๆ หรือเพื่อจัดกิจกรรม FragmentActivities?
Jameson

ปกติแล้วกิจกรรมจะโฮสต์แฟรกเมนต์อื่นเท่านั้น ... และไม่ต้องกังวลกับ FragmentActivity มันเป็นคลาส "ฐาน" มากกว่าซึ่ง XXXActivity แฟนซีอื่น ๆ ทั้งหมดได้รับมาจาก
เมห์

แต่โฮสต์ AppCompat ของฉันควรเป็นคลาสใด? AppCompat อื่นหรืออย่างอื่น
Jameson

คุณมีสิ่งหนึ่งที่จะเข้าใจที่นี่: กิจกรรมโฮสต์แฟรกเมนต์ กิจกรรมไม่ได้โฮสต์โดยสิ่งอื่นใดโดยวิธีการเหล่านี้ไม่สามารถซ้อนกันได้ Appcompat เป็นอีกกิจกรรมประเภทหนึ่ง หลังจากนั้นคุณสามารถไปต่อและทำรังเศษได้ แต่นั่นเริ่มซับซ้อนในการจัดการ
flower_green

1
ไม่คุณใช้ appcompat เป็นกิจกรรมและคุณโฮสต์แฟรกเมนต์ไม่ใช่แฟรกเมนต์กิจกรรม
flower_green

7

หากคุณพูดคุยเกี่ยวกับActivity, AppcompactActivity, ActionBarActivityฯลฯ ฯลฯ ..

เราจำเป็นต้องพูดถึงคลาสฐานที่พวกมันกำลังขยายก่อนอื่นเราต้องเข้าใจลำดับชั้นของคลาสซุปเปอร์

ทุกสิ่งเริ่มต้นจากบริบทซึ่งเป็นคลาสสุดสำหรับคลาสเหล่านี้ทั้งหมด

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

Context ตามด้วยหรือขยายโดย ContextWrapper

ContextWrapperเป็นชั้นซึ่งขยายบริบทระดับที่เพียงได้รับมอบหมายทุกสายที่จะบริบทอื่น สามารถ subclassed เพื่อปรับเปลี่ยนพฤติกรรมโดยไม่ต้องเปลี่ยนบริบทเดิม

ตอนนี้เราไปถึง Activity

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

ด้านล่างคลาสจะถูก จำกัด ให้ขยาย แต่จะขยายโดยตัวสืบทอดภายในและให้การสนับสนุน Api ที่เฉพาะเจาะจง

SupportActivityเป็นชั้นซึ่งขยายกิจกรรมที่เป็นชั้นฐานสำหรับการเขียนฟังก์ชั่นการทำงานร่วมกันร่วมกัน

BaseFragmentActivityApi14เป็นชั้นซึ่งขยายSupportActivity ที่เป็นชั้นฐานมันถูก จำกัด ชั้น แต่มันถูกขยายโดย BaseFragmentActivityApi16เพื่อสนับสนุนการทำงานของV14

BaseFragmentActivityApi16เป็นชั้นซึ่งขยาย BaseFragmentActivityApi14ที่เป็นชั้นฐานสำหรับ {@code FragmentActivity } เพื่อให้สามารถใช้v16 APIs แต่มันก็เป็นคลาสที่ จำกัด แต่มันถูกขยายโดย FragmentActivity เพื่อรองรับการทำงานของ V16

ตอนนี้ FragmentActivty

FragmentActivityเป็นชั้นซึ่งขยาย BaseFragmentActivityApi16และต้องการที่จะใช้การสนับสนุนตามส่วนและพับ APIs

เมื่อใช้คลาสนี้ซึ่งตรงข้ามกับการสนับสนุนแฟรกเมนต์และตัวโหลดเดอร์ในตัวของแพลตฟอร์มใหม่คุณต้องใช้getSupportFragmentManager()และgetSupportLoaderManager()เมธอดตามลำดับเพื่อเข้าถึงคุณลักษณะเหล่านั้น

ActionBarActivityเป็นส่วนหนึ่งของ Support Library ไลบรารีการสนับสนุนถูกใช้เพื่อส่งมอบคุณลักษณะที่ใหม่กว่าบนแพลตฟอร์มที่เก่ากว่า ตัวอย่างเช่นActionBarเปิดตัวใน API 11 และเป็นส่วนหนึ่งของกิจกรรมโดยค่าเริ่มต้น (ขึ้นอยู่กับธีมจริง) ในทางตรงกันข้ามไม่มีActionBarบนแพลตฟอร์มเก่า ดังนั้นไลบรารีสนับสนุนจึงเพิ่มคลาสลูกของกิจกรรม ( ActionBarActivity ) ที่มีฟังก์ชั่นและActionBar ของ UI

ในปี 2558 ActionBarActivityเลิกใช้แล้วในการแก้ไข 22.1.0 ของ Support Library ควรใช้AppCompatActivityแทน

AppcompactActivityเป็นชั้นซึ่งขยาย FragmentActivityที่เป็นชั้นฐานสำหรับกิจกรรมที่ใช้คุณลักษณะบาร์ห้องสมุดการสนับสนุนการดำเนินการ

คุณสามารถเพิ่มActionBarให้กับกิจกรรมของคุณเมื่อรันบน API ระดับ 7 หรือสูงกว่าโดยขยายคลาสนี้สำหรับกิจกรรมของคุณและตั้งค่าธีมของกิจกรรมเป็นTheme.AppCompatหรือธีมที่คล้ายกัน

ที่นี่

ผมหมายถึงทั้งสองหนึ่ง , สอง


3

เนื่องจากชื่อมีแนวโน้มที่จะเปลี่ยนแปลงใน Android รุ่นอนาคต (ปัจจุบันเป็นล่าสุดAppCompatActivityแต่อาจจะมีการเปลี่ยนแปลงในบางจุด) ฉันเชื่อว่าสิ่งที่ดีที่จะมีคือคลาสActivityที่ขยายออกไปAppCompatActivityและกิจกรรมทั้งหมดของคุณจะขยายจากเดิม หากวันพรุ่งนี้พวกเขาเปลี่ยนชื่อเป็นAppCompatActivity2ตัวอย่างคุณจะต้องเปลี่ยนมันในที่เดียว


0

AppCompatActivityขยายFragmentActivityขยายBaseFragmentActivityApi16ขยายBaseFragmentActivityApi14ขยายSupportActivityขยายกิจกรรม

ดังนั้นกิจกรรมจึงเร็วกว่า & AppCompatActivityที่สุดเท่าที่จะทำได้

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