ทุกคนสามารถช่วยเหลือฉันรู้เกี่ยวกับBundle savedInstanceState
ในonCreate(Bundle savedInstanceState)
ผมมือใหม่ใน Android ฉันพยายามทำความเข้าใจจาก developer.android.com แต่ฉันไม่สามารถที่จะเข้าใจ ใครสามารถทำให้มันง่ายขึ้น?
ทุกคนสามารถช่วยเหลือฉันรู้เกี่ยวกับBundle savedInstanceState
ในonCreate(Bundle savedInstanceState)
ผมมือใหม่ใน Android ฉันพยายามทำความเข้าใจจาก developer.android.com แต่ฉันไม่สามารถที่จะเข้าใจ ใครสามารถทำให้มันง่ายขึ้น?
คำตอบ:
หากคุณบันทึกสถานะของแอปพลิเคชันในกลุ่ม (โดยทั่วไปจะเป็นข้อมูลแบบไดนามิกที่ไม่ถาวรในonSaveInstanceState
) สามารถส่งต่อกลับไปได้onCreate
หากจำเป็นต้องสร้างกิจกรรมใหม่ (เช่นการเปลี่ยนแปลงการวางแนว) เพื่อไม่ให้สูญเสียก่อนหน้านี้ ข้อมูล. หากไม่มีการให้ข้อมูลsavedInstanceState
จะเป็นโมฆะ
... คุณควรใช้เมธอด onPause () เพื่อเขียนข้อมูลถาวร (เช่นการแก้ไขของผู้ใช้) ไปยังที่เก็บข้อมูล นอกจากนี้เมธอด onSaveInstanceState (Bundle) ถูกเรียกก่อนที่จะวางกิจกรรมในสถานะพื้นหลังดังกล่าวช่วยให้คุณสามารถบันทึกสถานะอินสแตนซ์แบบไดนามิกใด ๆ ในกิจกรรมของคุณลงใน Bundle ที่กำหนดเพื่อรับใน onCreate (Bundle) ในภายหลังหากกิจกรรม ต้องสร้างใหม่ ดูส่วนวงจรชีวิตของกระบวนการสำหรับข้อมูลเพิ่มเติมว่าวงจรชีวิตของกระบวนการเชื่อมโยงกับกิจกรรมที่โฮสต์อยู่อย่างไร โปรดทราบว่าสิ่งสำคัญคือต้องบันทึกข้อมูลถาวรใน onPause () แทนที่จะเป็น onSaveInstanceState (Bundle) เนื่องจากข้อมูลหลังไม่ได้เป็นส่วนหนึ่งของการเรียกกลับของวงจรชีวิตดังนั้นจะไม่ถูกเรียกในทุกสถานการณ์ตามที่อธิบายไว้ในเอกสารประกอบ
onCreate(Bundle savedInstanceState)
คุณจะได้รับBundle
โมฆะเมื่อกิจกรรมเริ่มต้นในครั้งแรกและจะถูกนำไปใช้เมื่อการวางแนวกิจกรรมเปลี่ยนไป .......
http://www.gitshah.com/2011/03/how-to-handle-screen-orientation_28.html
Android เป็นอีกวิธีหนึ่งที่สวยงามในการบรรลุเป้าหมายนี้ onSaveInstanceState()
เพื่อให้บรรลุนี้เราจะต้องแทนที่วิธีที่เรียกว่า แพลตฟอร์ม Android ช่วยให้ผู้ใช้บันทึกสถานะอินสแตนซ์ใด ๆ สามารถบันทึกสถานะอินสแตนซ์ใน Bundle ได้ Bundle ถูกส่งผ่านเป็นอาร์กิวเมนต์ของเมธอด onSaveInstanceState
เราสามารถโหลดสถานะอินสแตนซ์ที่บันทึกไว้จาก Bundle ที่ส่งผ่านเป็นอาร์กิวเมนต์ของonCreate
เมธอด นอกจากนี้เรายังสามารถโหลดสถานะอินสแตนซ์ที่บันทึกไว้ในonRestoreInstanceState
วิธีการ แต่ฉันจะทิ้งไว้ให้ผู้อ่านคิดออก
savedInstanceState
จะไม่null
ถ้าonSavedInstanceState()
ถูกเรียกว่าก่อนหน้านี้ การเปลี่ยนแปลงการวางแนวเป็นเพียงตัวอย่างเดียวที่อาจเกิดขึ้น
Bundle
อาร์กิวเมนต์onCreate(Bundle)
จะไม่ใช่null
if และเฉพาะในกรณีที่Activity
มีonSaveInstanceState
การเรียกใช้เมธอดก่อนหน้านี้เท่านั้น สิ่งนี้เกิดขึ้นระหว่างการเปลี่ยนแปลงการวางแนว ... และยังเกิดขึ้นเมื่อกิจกรรมกลับมาหลังจากที่ถูกฆ่าโดย OS และเมื่อคุณทริกเกอร์การเปลี่ยนแปลงการกำหนดค่าอื่น ๆ ที่น่าสนใจบนอุปกรณ์ของคุณ
ตามที่ Dhruv Gairola ตอบคุณสามารถบันทึกสถานะของแอปพลิเคชันได้โดยใช้ Bundle savedInstanceState ฉันพยายามยกตัวอย่างง่ายๆที่ผู้เรียนใหม่อย่างฉันสามารถเข้าใจได้ง่าย
สมมติว่าคุณมีส่วนง่ายๆที่มี TextView และปุ่ม ทุกครั้งที่คุณคลิกปุ่มข้อความจะเปลี่ยนไป ตอนนี้เปลี่ยนการวางแนวของอุปกรณ์ / โปรแกรมจำลองของคุณและสังเกตว่าคุณสูญเสียข้อมูล (หมายถึงข้อมูลที่เปลี่ยนแปลงหลังจากคลิกที่คุณได้รับ) และส่วนเริ่มต้นเป็นครั้งแรกอีกครั้ง โดยใช้ Bundle saveInstanceState เราสามารถกำจัดสิ่งนี้ได้ หากคุณดูชีวิตของชิ้นส่วน Fragment Lifecylceคุณจะได้รับเมธอด "onSaveInstanceState" ถูกเรียกเมื่อแฟรกเมนต์กำลังจะถูกทำลาย
ดังนั้นเราสามารถบันทึกสถานะหมายถึงค่าข้อความที่เปลี่ยนแปลงลงในบันเดิลนั้นเช่นนี้
int counter = 0;
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("value",counter);
}
หลังจากที่คุณทำการวางแนวแล้วเมธอด "onCreate" จะถูกเรียกใช่ไหม เราก็ทำได้
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState == null){
//it is the first time the fragment is being called
counter = 0;
}else{
//not the first time so we will check SavedInstanceState bundle
counter = savedInstanceState.getInt("value",0); //here zero is the default value
}
}
ตอนนี้คุณจะไม่สูญเสียคุณค่าของคุณหลังจากการวางแนว ค่าที่แก้ไขจะแสดงเสมอ
onCreate (Bundle savedInstanceState) ฟังก์ชันใน Android:
1) เมื่อมีการเรียกใช้กิจกรรมครั้งแรกหรือเรียกใช้เมธอด onCreate (Bundle savedInstanceState) มีหน้าที่สร้างกิจกรรม
2) เมื่อการวางแนว (เช่นจากแนวนอนเป็นแนวตั้งหรือแนวตั้งเป็นแนวนอน) ของกิจกรรมได้รับการเปลี่ยนแปลงหรือเมื่อระบบปฏิบัติการใด ๆ ยุติกิจกรรมอย่างมีพลังจากนั้นจึงบันทึก
3) หลังจากการวางแนวเปลี่ยนไปแล้ว onCreate (Bundle savedInstanceState) จะเรียกและสร้างกิจกรรมใหม่และโหลดข้อมูลทั้งหมดจากที่บันทึกไว้
4) โดยทั่วไปคลาส Bundle จะใช้ในการจัดเก็บข้อมูลของกิจกรรมเมื่อใดก็ตามที่เงื่อนไขข้างต้นเกิดขึ้นในแอพ
5) onCreate () ไม่จำเป็นสำหรับแอป แต่เหตุผลที่ใช้ในแอพเพราะวิธีนั้นเป็นที่ที่ดีที่สุดในการใส่รหัสเริ่มต้น
6) คุณสามารถใส่รหัสเริ่มต้นของคุณใน onStart () หรือ onResume () และเมื่อคุณจะโหลดแอปก่อนมันจะทำงานเหมือนกับใน onCreate ()
onCreate(Bundle)
เรียกว่าเมื่อกิจกรรมเริ่มต้นครั้งแรก คุณสามารถใช้เพื่อดำเนินการเริ่มต้นเพียงครั้งเดียวเช่นการสร้างอินเทอร์เฟซผู้ใช้ onCreate()
รับพารามิเตอร์หนึ่งตัวที่เป็นโมฆะหรือข้อมูลสถานะบางอย่างที่บันทึกไว้ก่อนหน้านี้โดยonSaveInstanceState
.
onCreate (Bundle savedInstanceState) ได้รับการเรียกและบันทึกไว้แล้ว จากนั้นแอปของคุณจะสามารถคว้า (จับ) ข้อมูลจากบันทึกไว้แล้วสร้างกิจกรรมของคุณได้